Babel:根编程选项

Babel: root programmatic options

我似乎完全不明白在哪里放置 babel 的根编程选项。

如果我有一个 monorepo 并且需要告诉不同的子包他们应该向上查找我的 babel.config.js 那么我应该将 rootMode: "upwards" 放入子包的 .babelrc 中,对吗?这不起作用,因为会产生错误

Error: .rootMode is only allowed in root programmatic options

不知何故,我根本找不到 put/use root 编程选项的任何示例...任何人都可以指出正确的方向吗?

如果你使用的是Webpack,你需要把它放在那里。

module: {
  [..]
  rules: [
    // Transpile ES6 Javascript into ES5 with babel loader
    {
      test: /\.jsx?$/,
      exclude: [/node_modules/, /json/],
      loader: 'babel-loader',
      options: {
        rootMode: 'upward'
      },
    },
    [..]
  ],
  [..]
},

否则我遇到了和你一样的问题,我无法使用密钥 babel.

将其放入 package.json 文件中

我在使用我的(可能是非标准的)monorepo 设置时遇到了这个错误,我的每个包都有顶级子目录。没有顶级包。当我升级到 Babel 7 时,我的 Jest 测试不再将 yarn linked 的包转换为我 运行 Jest.

的包

我添加了一个顶级 babel.config.js 作为 Babel's monorepo instructions 的一部分。我在这三个地方 rootMode: "upwards":

  • ui-package/webpack.config.js 用于改造应用程序。

  • ui-package/babel-jest.js 用于测试,它看起来像:

    module.exports = require("babel-jest").createTransformer({
      rootMode: "upward",
    })
    

    并在同一目录中从 jest.config.js 引用,例如:

    transform: {
      "^.+\.jsx?$": "./babel-jest.js",
    },
    
  • 并且在/babel.config.js中,新添加的顶层babel conf文件。

将它从最后一个中删除消除了错误。

任何 API-related 选项都称为编程选项。看看我与 Babel 主要维护者的讨论:https://github.com/babel/babel/discussions/14405.

It's when you specify them directly to Babel (babel.transformSync(code, programmaticOptions) or to the Babel integration you are using (e.g. babel-loader, which can pass them to its internal babel.transform call). In other words, not in presets or config files. [...]

by @nicolo-ribaudo - Babel core team.