【问题标题】:Babel with NodeJS not working spread operator带有 NodeJS 的 Babel 无法使用扩展运算符
【发布时间】:2019-11-15 23:03:28
【问题描述】:

我使用的是 Babel (7.5.0) 和 NodeJS 最新版 (12.x),所以扩展运算符已经由 NodeJS 处理,我不希望 babel 搞砸它。

这是我的 .babelrc :

{
    "plugins": [
        "@babel/plugin-proposal-class-properties",
        "@babel/plugin-transform-runtime"
    ],
    "presets": [
        [
            "@babel/preset-env",
            {
                "modules": "commonjs",
                "targets": {
                    "node": "current"
                },
                "useBuiltIns": "usage"
            }
        ]
    ]
}

这是我的错误:

ERROR in ./src/utils/logger/logger.js
Module build failed: ReferenceError: Unknown helper objectSpread2
    at loadHelper (/app/node_modules/@babel/helpers/lib/index.js:238:27)
    at Object.getDependencies (/app/node_modules/@babel/helpers/lib/index.js:279:21)
    at File.addHelper (/app/node_modules/@babel/core/lib/transformation/file/file.js:204:33)
    at PluginPass.addHelper (/app/node_modules/@babel/core/lib/transformation/plugin-pass.js:31:22)
    at PluginPass.ObjectExpression (/app/node_modules/@babel/plugin-proposal-object-rest-spread/lib/index.js:379:25)
    at newFn (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/visitors.js:193:21)
    at NodePath._call (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:53:20)
    at NodePath.call (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:40:17)
    at NodePath.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:88:12)
    at TraversalContext.visitQueue (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
    at TraversalContext.visitMultiple (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:85:17)
    at TraversalContext.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:144:19)
    at Function.traverse.node (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/index.js:94:17)
    at NodePath.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:95:18)
    at TraversalContext.visitQueue (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
    at TraversalContext.visitMultiple (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:85:17)
    at TraversalContext.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:144:19)
    at Function.traverse.node (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/index.js:94:17)
    at NodePath.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:95:18)
    at TraversalContext.visitQueue (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
    at TraversalContext.visitSingle (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:90:19)
    at TraversalContext.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:146:19)
    at Function.traverse.node (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/index.js:94:17)
    at NodePath.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:95:18)
    at TraversalContext.visitQueue (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
    at TraversalContext.visitMultiple (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:85:17)
    at TraversalContext.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:144:19)
    at Function.traverse.node (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/index.js:94:17)
    at NodePath.visit (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:95:18)
    at TraversalContext.visitQueue (/app/node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
 @ ./src/app.js 5:0-40
 @ multi ./src/app.js

我读到我需要安装一些插件,但我认为那是针对较旧的 nodejs 版本,我不明白为什么我需要一个用于内置 nodejs 功能的插件。

我该怎么做?

更新:

我在那里创建了一个问题:https://github.com/babel/babel-loader/issues/798

【问题讨论】:

  • 这个插件"transform-object-rest-spread" 启用扩展运算符。我不确定是否已经内置了某些功能,那么为什么我们必须使用某些插件来使用该功能。
  • 我必须使用这个插件吗?即使使用 NodeJS 12.x ?
  • 我不确定。我没有检查它。让我深入研究一下,我会在这里添加关于我的发现的评论。
  • 我可以在节点版本v10.16.0中成功使用spread运算符。
  • 所以你的意思是它不适用于 Node v12.x 但适用于 v10.16.0

标签: javascript node.js webpack babeljs babel-loader


【解决方案1】:

这里是 Babel 维护者。

我们在 v7.5.0 中有一个错误(很快会在 v7.5.1 中修复)。您有两种可能的解决方法:

  1. 运行 npm install @babel/helpers(或使用 yarn):这将强制 npm 下载 @babel/helpers v7.5.0,其中包含缺少的帮助程序。 如果您也在使用@babel/transform-runtime,请确认@babel/runtime 是v7.5.0
  2. 如果您使用的是 yarn,您可以将 @babel/plugin-proposal-object-rest-spread 锁定到不受该问题影响的旧版本。将此代码添加到您的 package.json:

    "resolutions": {
      "**/@babel/plugin-proposal-object-rest-spread": "7.4.4"
    }
    

编辑这应该在 v7.5.1 中修复,请更新

【讨论】:

  • 喜欢从 7 分钟前找到一个 SO 答案来解决我已经为 30 分钟而奋斗的问题:)。
  • 我尝试安装@babel/helpers 但无济于事,我只是调用了一个不同版本的spreadoperator2。现在我得到'@babel/runtime/helpers/objectSpread2' does not exist,这意味着它在运行时而不是助手中寻找它。
  • @jQwierdy 看起来您发现了该助手的另一个错误(Babel 应该知道它不在 @babel/runtime 中并内联注入)。我会更新我的答案。
  • 这应该已在 v7.5.1 中修复。还有另一个尚未修复的已知错误(运行时帮助程序在没有 getOwnPropertyDescriptors 的 polyfill 的旧浏览器中不起作用)
  • @Nicolò 我在 babel-loaderwebpack 3.x 中使用它,更新到最新版本后仍然遇到同样的问题
猜你喜欢
  • 2018-05-19
  • 2020-06-22
  • 2020-12-20
  • 2019-07-31
  • 2018-06-12
  • 2018-12-16
  • 1970-01-01
  • 2022-01-01
  • 2021-09-02
相关资源
最近更新 更多