为什么要排除 node_modules 不被 Babel 转译?

Why exclude node_modules from being transpiled by Babel?

我正在为一个项目使用 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 处理的文件中。

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

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

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