【问题标题】:babel 7 ignores files outside of current directorybabel 7 忽略当前目录之外的文件
【发布时间】:2018-12-20 14:14:39
【问题描述】:

假设我有以下项目结构(比下面的结构更复杂):

  • 通用组件
    • CommonComponentA
    • CommonComponentB
    • package.json
    • webpack.config.js
    • .babelrc
  • 模块A
    • ComponentC //导入 CommonComponentA
    • 组件D
    • package.json
    • webpack.config.js
    • .babelrc
  • 模块 B
    • ComponentE //导入 CommonComponentB
    • 组件F
    • package.json
    • webpack.config.js
    • .babelrc

我分别编译、捆绑和使用 ModuleA 和 ModuleB。当我切换到 babel 7 时,从 CommonComponents 目录导入模块停止工作。 Babel 会忽略当前工作目录之外的文件并且不会转译它们,因此 webpack 编译失败并在导入的组件中抱怨“意外令牌”。

据我目前所了解,他们改变了 .babelrc 查找发生的方式。我真的无法理解“root”、“babelrcRoots”等术语。 有人可以解释我需要做什么才能从各自的工作目录成功编译 ModuleA 和 ModuleB 吗?

【问题讨论】:

    标签: javascript webpack babeljs babel-loader


    【解决方案1】:

    根据你的项目的真实结构(它是一个带有根文件夹的 monorepo 设置?)和你正在使用的 webpack 配置,你可以有几种方法来解决这个问题,一种方法是添加include key关于 webpack 配置文件的 babel loader 规则,你最终会得到这样的结果:

    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /(node_modules|bower_components)/,
          include: path.resolve(__dirname, '../CommonComponents'),
          use: {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env']
            }
          }
        }
      ]
    }
    

    如前所述,这取决于您的实际项目结构,但您可以试一试并检查它是否有效。

    【讨论】:

    • include 指令已经准备好添加正确的路径,并且如上所述它适用于 babel 6。
    • 它不完全是 monorepo。我可以尝试在根级别添加 babelconfig.js 以进行项目范围的配置(如 Babel 7 文档中所述),但无法弄清楚如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多