【问题标题】:Why exclude node_modules from being transpiled by Babel?为什么要排除 node_modules 被 Babel 转译?
【发布时间】:2021-02-01 23:47:53
【问题描述】:

我在一个项目中使用 Webpack 和 Babel。我安装了babel-loader,以便在我的构建过程中包含 Babel。我在网上看到的babel-loader的大部分例子都是在webpack的配置文件中使用如下配置:

module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: ['babel-loader']
      }
    ]
  }

我的问题是,为什么我们要排除 node_modules 被 Babel 转译?我知道文档说排除它会加快捆绑过程。但是,如果 node_modules 包含我的应用程序运行所需的依赖项,那么 Babel 不应该也转换这些依赖项吗?假设我想编译我的应用程序以使用 ES5 代码,并且 node_modules 包含使用 ES6+ 的库。似乎 node_modules 也应该包含在 Babel 处理的文件中。

【问题讨论】:

    标签: babeljs babel-loader


    【解决方案1】:

    node_modules 中的包可能已经构建、缩小并针对 ES3,不需要 Babel 进一步转译它们。

    如果你导入一个包并且它在 ES6 中,Webpack 会自动在内部构建一个依赖关系图,并会检测到这样的包并使用 Babel 将其转换为你想要的目标 (ES5)。

    您不想让 Babel 转译驻留在 node_modules 文件夹中的所有文件(可能是数千个文件),这是资源密集型的,并且需要更长的时间。

    【讨论】:

    • 谢谢,这很有道理。我同意转换 node_modules 会很密集。很高兴知道 webpack 会处理任何可能是 ES6+ 的“异常”包。
    • 说“它没用”是不正确的——转译node_modules 将非常有用,因为它允许包作者只将现代 JS 发送到 NPM 并且消费者可以选择他们使用的 ES '想瞄准。发布 ES3 的问题是没有好的方法来编译它,这会产生大量的捆绑包,因为它们被填充到边缘并充满了 polyfills 和冗长的 JS。
    • 感谢您指出这一点,我已相应地编辑了答案。
    猜你喜欢
    • 2019-06-06
    • 2019-07-14
    • 1970-01-01
    • 2019-09-04
    • 2019-04-14
    • 2019-08-25
    • 1970-01-01
    • 2017-04-20
    • 2020-08-07
    相关资源
    最近更新 更多