我正在编写一个节点工具,然后在发布到npm之前将其与webpack捆绑在一起(使用npx快速执行)
我不需要任何加载器/ babel设置,因为它是纯JavaScript,在我当前的节点9下正常运行。它曾经工作过。 webpack配置为trivial(13行)。
然而,捆绑时,webpack latest(^ 3.10.0)抱怨我开始使用的扩展语法:(此时JS阶段3,但节点8.1+和节点9接受)
Module parse failed: Unexpected token (47:2)
You may need an appropriate loader to handle this file type.
|
| return {
| ...SEC,
| listenToUncaughtErrors,
| listenToUnhandledRejections,
为什么?目标(节点)正在接受这种语法,而不是webpack应该只捆绑我的代码吗?
webpack是否使用嵌入式JS解释器解析我的代码?看起来似乎如此,但我在哪里可以找到这个解释器的规格并看看支持哪些功能?
我在文档中找不到任何内容。类似的问题here不是“无巴贝尔”配置。
为什么webpack在这里抱怨?
[edit]配置和完整代码here并粘贴在这里以方便您使用:
module.exports = {
target: 'node',
entry: {
main: './src/index.js'
},
output: {
path: path.join(__dirname, '../dist'),
filename: 'bundled.js',
},
externals: {
conf: 'commonjs conf',
},
}
答案 0 :(得分:2)
(我的一位同事指出了答案)
是,webpack正在解析JavaScript代码。它在内部使用acorn“一个很小的,快速的JavaScript解析器,完全用JavaScript编写。”在提出此问题时,webpack为calling acorn,语言版本为2017
和是,acorn限制了可用的JavaScript功能。根据{{3}}:“仅'第4阶段'(已完成)ECMAScript功能正由Acorn实施。”
Spread语法是第3阶段的功能(在这个问题的时候),webpack / acorn无法解析它,导致错误:
模块解析失败:意外的令牌。
您可能需要适当的加载程序来处理此文件类型。
所以是,webpack正在解析代码并使用stage< = 3功能需要一个webpack加载器。