没有加载程序的webpack阻止我使用高级JavaScript语法,解析本机扩展语法

时间:2018-01-14 10:26:06

标签: javascript node.js webpack

我正在编写一个节点工具,然后在发布到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',
    },
}

1 个答案:

答案 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加载器。