System.import()和import()之间的区别?

时间:2017-02-12 20:03:13

标签: javascript import webpack ecmascript-6 webpack-2

webpack 1 docs is statement中,webpack 2中的System.import()将使用动态需求:

  

幸运的是,有一个JavaScript API“加载器”规范   编写以处理动态用例:System.load(或   的 System.import )。此API将与上述本机等效   require种变种。

在此期间,网络上的System.import()使用了System.import() {。}}。

examples,作者决定将import()更改为import()

  

System.import添加为Code Splitting构造。它应该用来代替   System.import尽可能{。}}。 {@ 1}}将被弃用   webpack 2发布(在webpack 3中删除)因为它的行为不正确   根据规范

import()基于Before releasing webpack 2规范,您可以阅读更多原因tc39/proposal-dynamic-import

有人可以解释System.import()import()之间的区别吗?

尽管名称不同,但用法看起来一样:

import(modulePath)
  .then(module => module.default())
  .catch(/* ... */);

System.import(modulePath)
  .then(module => module.default())
  .catch(/* ... */);

但是在weback 2中,文档是:“System.import()行为根据规范不正确” - 因此它表明System.import()import()之间存在差异。

2 个答案:

答案 0 :(得分:4)

您的第一句话的重要部分是

  正在编写的规范

当Webpack 1实施System.import时,规范仍在不断发展。如果事实仍然如此。 Webpack 1实现了System.import,因为那是当时潜在的API被抛出的东西。

Webpack 2实现了import(),因为这是一个新的提案,用于标准化语法,而不是基于库的方法。

答案 1 :(得分:2)

以下是您正在寻找的内容:tc39 Proposal for Import

  

实际功能

     

Loader ideas集合的草稿在不同时间具有名为System.import()或System.loader.import()或类似的实际函数(不仅仅是函数式语法形式),它们完成相同的用例。 / p>      

这里的最大问题,如规范编辑所述,是如何解释这些函数的说明符参数。由于这些只是函数,它们在整个Realm中是相同的,并且不会因脚本或模块而异,因此无论从何处调用,函数都必须将其参数解释为相同。 (除非实现像堆栈检查一样真正奇怪的东西。)因此,这可能会遇到与上面的importModule函数的文档基础URL问题类似的问题,其中相对模块说明符成为错误场并且不匹配任何附近的导入声明。