Ecmascript 6 使用Web包和系统的未解析节点模块依赖关系
我的代码中有以下ES6导入,用于从Ecmascript 6 使用Web包和系统的未解析节点模块依赖关系,ecmascript-6,webpack,babeljs,systemjs,Ecmascript 6,Webpack,Babeljs,Systemjs,我的代码中有以下ES6导入,用于从节点\u模块文件夹导入项目依赖项: import React from 'react'; 通过使用此网页包配置,一切正常: { module: { loaders: [ { loader: 'babel', test: /(\.js|\.jsx)/, exclude: /(node_modules|bower_components)/ } ] } } 我最终得到一
节点\u模块
文件夹导入项目依赖项:
import React from 'react';
通过使用此网页包配置,一切正常:
{
module: {
loaders: [
{
loader: 'babel',
test: /(\.js|\.jsx)/,
exclude: /(node_modules|bower_components)/
}
]
}
}
我最终得到一个捆绑文件,其中包含已自动添加的react依赖项
但如果我将babel配置为使用模块:“system”
将导入输出为system.register
:
{
module: {
loaders: [
{
loader: 'babel',
test: /(\.js|\.jsx)/,
exclude: /(node_modules|bower_components)/,
query: {
modules: 'system',
moduleIds: true,
keepModuleIdExtensions: true
}
}
]
}
}
然后绑定的文件不再包含react依赖项,我必须在浏览webpack后将systemjs
库附加到编译后的文件中
我们应该如何使用webpack
处理此配置?为什么webpack
不能像编译到commonjs
时那样使用system
绑定react依赖项
PS:我特别要求使用
webpack
,而不是systemjsbuilder
或jspm
来实现这一点,这不是webpack的工作方式。Webpack可以处理AMD和CommonJS模块,但不能处理SystemJS模块
对于支持模块系统的Webpack,它需要能够查看JS并静态地决定哪些文件取决于什么,然后修改该文件,使其能够工作并与其他模块兼容。它现在不知道SystemJS是什么,所以它看到的只是一个JS文件,它不引用任何公共JS模块,因为它从不使用
require()
,我从技术上理解为什么会发生这种情况。但如果系统应该成为下一个标准,我会认为Webpack可以扩展其系统支持(即使它是一个额外的配置),这样,如果导入未定义,它会像commonjs一样出现在节点_模块中……这将是一个要问Webpack维护者的问题。这个系统还是相当新的。也有一段时间“Webpack2.x”正在制作中。也许这会支持它SystemJS
基于一个仍在不断变化的规范。说“这将是下一个规范”假设规范还没有开发出来,事实就是这样。如果你使用的是webpack,那么除了ES6->CommonJS之外,使用模块系统并没有什么好处。Webpack2将支持标准ES6模块,所以您只需要完全禁用Babel中的模块传输。