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

Eve*_*tss 19 javascript import ecmascript-6 webpack webpack-2

webpack 1中,docs是 webpack 2将System.import()用于动态需求的声明:

幸运的是,有一个JavaScript API"加载器"规范被编写来处理动态用例:( System.loadSystem.import).此API将与上述require变体等效 .

在此期间,网络上的所有内容都是使用它的例子System.import().


在发布webpack 2之前,作者决定System.import()改为import():

添加import()为Code Splitting构造.它应该 System.import在可能的情况下使用.System.import将在webpack 2发布中弃用(在webpack 3中删除),因为根据规范它的行为是不正确的.

import()基于tc39/proposal-dynamic-import规范,您可以在此处阅读更多为何进行此更改的原因.


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

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

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

System.import(modulePath)
  .then(module => module.default())
  .catch(/* ... */);
Run Code Online (Sandbox Code Playgroud)

但是在weback 2中,doc是:" System.import()根据规范行为是不正确的" - 所以它表明System.import()和之间存在差异import().

log*_*yth 5

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

正在编写的规范

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

Webpack 2实现import()是因为这是一种新的提议,用于标准化语法方法而非基于库的方法.

  • 这并没有解释这两者之间的实际区别,如果有的话. (12认同)

Mic*_*eau 3

这就是您要查找的内容: tc39 进口提案

一个实际的函数

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

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