繁体   English   中英

使用JavaScript ES6模块导入现有库

[英]Import existing library with JavaScript ES6 Modules

如何使用JavaScript的ES6模块加载和运行现有的库?

例如,假设我需要加载现有的polyfill:

import {poly} from "thirdParty/poly"; 

如何在不更改源的情况下运行导入的poly脚本并将其属性加载到当前命名空间?

以下是两个实际问题,以帮助澄清我正在尝试解决的问题:

  1. 我有一个名为rafPolyfill.js的脚本,它是window.requestAnimationFrame的rafPolyfill.js 我需要将它导入全局范围并在加载后立即运行它。 使用<script>标记很容易做到这一点:

它运行并将自身加载到全局范围。 如何使用ES6模块完成这项工作?

  1. 我有另一个名为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM