在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()
之间存在差异。
答案 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问题类似的问题,其中相对模块说明符成为错误场并且不匹配任何附近的导入声明。