[英]Import existing library with JavaScript ES6 Modules
如何使用JavaScript的ES6模块加载和运行现有的库?
例如,假设我需要加载现有的polyfill:
import {poly} from "thirdParty/poly";
如何在不更改源的情况下运行导入的poly
脚本并将其属性加载到当前命名空间?
以下是两个实际问题,以帮助澄清我正在尝试解决的问题:
我有一个名为rafPolyfill.js
的脚本,它是window.requestAnimationFrame的rafPolyfill.js
。 我需要将它导入全局范围并在加载后立即运行它。 使用<script>
标记很容易做到这一点:
它运行并将自身加载到全局范围。 如何使用ES6模块完成这项工作?
我有另一个名为Font.js
脚本,它是字体的预加载器。 它让你创建这样的新字体对象:
var font = new Font();
我使用Font.js加载脚本标记,如下所示:
<script src="Font.js"><script>
如果不访问,更改或理解此脚本的源代码,如何使用ES6模块以与<script>
标记相同的方式加载和使用它? 我只需要这些脚本在加载时运行并自行处理。
可能的解决方案可能是使用模块Loader API:
http://wiki.ecmascript.org/doku.php?id=harmony:module_loaders
这个文档描述了System
加载器的全局绑定 ,但是我恐怕没有词汇来完全理解它试图解释的内容。 任何有关解码此文档的帮助将不胜感激!
这个答案是:“不,基于ES6规范,不可能像使用脚本标记一样加载和运行全局脚本。”
但有一个解决方案:SystemJS
https://github.com/systemjs/systemjs
它是ES6模块,AMD模块和全局脚本(使用<script>
标签加载的任何内容)的通用模块加载器
这个或类似的东西对你有用吗?
var stuffFromPoly = import "thirdParty/poly"
然后,您将调用存储在stuffFromPoly
中的对象的方法。
如果不是这样,你可以稍微扩展一下你的问题吗,我正在试着猜测你的意思,我可能会有点偏僻。
快速记录''你的更新':
您是否反对使用https://www.npmjs.org/package/es6-module-loader ? 或者这不能解决问题吗?
从自述文件:
新的ES6模块规范使用导入和导出语法在JavaScript中定义模块系统。 对于动态加载模块,规范中还包含动态模块加载器工厂(新的加载器)。
单独的浏览器规范定义了浏览器的动态ES6模块加载器加载器,window.System,以及使用模块的标记。
此polyfill实现Loader和Module全局变量,完全按照2013-12-02 ES6模块规范草案和系统浏览器加载器中的指定,完全按照示例实现中的建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.