为什么在使用babel-loader时排除node_modules?

时间:2019-01-12 03:41:46

标签: javascript webpack babeljs

网站上询问的大多数问题是如何排除node_modules,但我想知道为什么我们要排除node_modules

module.exports = {
  mode: 'production',
  entry: './src/index.js',
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'app.bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        options: {
          presets: ['@babel/preset-env']
        }
      }
    ]
  }
};

有人可以向我解释排除node_modules背后的原因吗?

1 个答案:

答案 0 :(得分:1)

简而言之,转堆是一个昂贵的过程,许多项目中有成千上万(如果不是成千上万)的代码行导入该Babel,则需要重新运行。如前所述,您的node_modules应该已经可以运行而无需进行编译,并且有一些简单的方法可以排除您的node_modules但可以编译需要它的任何代码。参见https://github.com/babel/babel-loader/issues/171

关于是否应该由开发人员承担转库的应用程序工作或由库开发人员负责的问题,我已经来回讨论了很多。大部分时间都是为了获得浏览器支持而进行转译,并且库创建者不知道您需要支持哪些浏览器,因此它们最终要么转译要么不转译,从而将其交给您。如果它们可以移植到ES5,那么您就算是黄金,如果不是这样,通常这很容易完成,找出导致问题的库并自己移植