0

我有一个问题,我想转换我正在使用的包的 ...spread 运算符。

请注意,我使用的是 babel 6,在脚本版本 1.1.5 中弹出 create-react-app 的上下文中。我对此有一个最小的复制。

我现在找不到它,但我正在使用一些 babel 文档建议的技术,我将它添加到我的 webpack 配置中:

          {
            test: /\.m?js$/,
            exclude: {
              test: /(node_modules)/, // Exclude libraries in node_modules ...
              not: [

                /@monaco-editor\/react/
              ]
            },
            use: {
              loader: require.resolve('babel-loader'),
              options: {

                "plugins": [
                  [require.resolve("babel-plugin-transform-object-rest-spread"), { "useBuiltIns": true }]]
                
              }
            }
          },

基本上说'不要在 node_modules 中转换任何东西,除了那个包,并使用这个插件进行转换'。

运行此程序时遇到的问题,您会收到此错误:

./node_modules/@monaco-editor/react/lib/es/index.js
Module build failed: Error: Couldn't find preset "@babel/preset-env" relative to directory "/Users/djohnston/git/cra1/node_modules/@monaco-editor/react"
    at Array.map (<anonymous>)

请注意,它抱怨的 babel 预设是 babel 7 @babel/preset-env 预设,而我使用的是 babel 6。

但是 - 如果您导航到 node_modules/@monaco-editor/react/package.json 并从中删除以下 babel 属性:

  "babel": {
    "presets": [
      "@babel/preset-env",
      "@babel/preset-react"
    ]
  },

然后代码开始工作。

这对我来说意味着 babel 正在检查 package.json 并决定开始使用 @babel/preset-env 开始转换它,而不是只使用我在 webpack 配置中指定的配置。

为什么 babel 会这样做,有没有我可以用来解决这个问题的配置选项?

此问题的最低重现:https ://github.com/dwjohnston/cra1-monaco/tree/eject-solve-attempt

关于@monaco-editor/react 的问题我已经提出了这个问题(要求他们转换传播运算符:https ://github.com/suren-atoyan/monaco-react/issues/221 )

4

1 回答 1

1

Babel 6 在读取配置文件方面非常激进,这正是您遇到的原因造成的。Babel 7 改变了它的配置文件读取行为来避免这些问题。

在这种情况下,您唯一的选择是通过传入选项来明确告诉 Babel 6 跳过.babelrc/package.json处理。babelrc: falsebabel-loader

于 2021-04-12T15:56:19.150 回答