ES6:从URL导入模块

时间:2016-01-05 08:33:13

标签: javascript ecmascript-6 es6-module-loader

是否可以从ES6中的外部网址导入javascript模块?

我尝试过(使用babel-node):

import mymodule from 'http://...mysite.../myscript.js';
// Error: Cannot find module 'http://...mysite.../myscript.js'

3 个答案:

答案 0 :(得分:20)

2018更新:模块加载器规范现在是ES规范的一部分 - 您在浏览器中使用<script type="module">并且使用带有Node.js的自定义--loader允许并允许您描述的内容和Deno一样,如果你进入那个。

模块加载器规范和导入/导出语法是分开的。所以这是模块加载器的属性(不是ES规范的一部分)。如果您使用支持SystemJS等插件的模块加载程序。

答案 1 :(得分:4)

TL; DR:

目前,

答案很长:

有两种不同的规格:ES6定义了导出/导入的语法。 并且Loader Spec实际上定义了这些模块将如何加载

除了规范之外,我们开发人员的重要部分是:

  

JavaScript Loader允许主机环境(如Node.js和浏览器)按需获取和加载模块。它提供了一个可连接的管道,允许像Browserify,WebPack和jspm这样的前端打包解决方案进入加载过程。

     

此部门提供了一种开发人员可以在所有JavaScript环境中使用的单一格式,以及针对每种环境的单独加载机制。例如,Node Loader将使用自己的模块查找算法从文件系统加载其模块,而Browser Loader将获取模块并使用浏览器提供的打包格式。

     

(...)

     

主要目标是在节点和浏览器环境之间尽可能多地保持此过程的一致性。例如,如果JavaScript程序想要动态地将.coffee文件翻译成JavaScript,则Loader会定义&#34;翻译&#34;可以使用的钩子。这允许程序参与加载过程,即使某些细节(特别是从主机定义的存储中获取特定模块的过程)在不同环境之间会有所不同。

因此,我们依赖主机环境(节点,浏览器,babel等)为我们解析/加载模块并为流程提供挂钩。

答案 2 :(得分:2)

您也可以使用scriptjs,在我的情况下需要较少的配置。

var scriptjs = require('scriptjs');

scriptjs('https://api.mapbox.com/mapbox.js/v3.0.1/mapbox.standalone.js', function() {
    L.mapbox.accessToken = 'MyToken';
});