从块Webpack 4中排除某些模块

时间:2018-06-19 22:13:51

标签: javascript reactjs webpack

如何指定不希望在Webpack 4中使用模块的块,假设我不希望供应商文件中出现破折号(无论后果如何),我该怎么办?

这是实际配置:

splitChunks: {
  name: 'vendors',
  maxAsyncRequests: 1,
  maxInitialRequests: 2,
  chunks: 'initial',
}

5 个答案:

答案 0 :(得分:2)

test也可以采用一种方法。这提供了很大的灵活性。例如。

vendor: {
    test(mod/* , chunk */) {


     // Only node_modules are needed
     if (!mod.context.includes('node_modules')) {
       return false;
     }
     // But not node modules that contain these key words in the path
     if ([ 'lodash', 'react'].some(str => mod.context.includes(str))) {
       return false;
     }
     return true;
   },
   name: 'vendor',
   chunks: 'all',
   reuseExistingChunk: true
 },

答案 1 :(得分:2)

您可以使用负前瞻来实现:

test: /[\\/]node_modules[\\/]((?!(lodash)).*)[\\/]/

答案 2 :(得分:1)

用于将项目的所有依赖项从break加载到名为/node_modules的块中的配置如下所示:

vendors

因此对于您的用例,您可以修改RegExp以排除所需的任何模块。当然,缺点是您必须纠缠正则表达式,并且该特定测试条件的确切格式超出了我的专业知识。我知道optimization: { splitChunks: { cacheGroups: { commons: { test: /[\\/]node_modules[\\/]/, name: "vendors", chunks: "all" } } } } 上的文档仍然很少,所以我希望这至少可以帮助您指明正确的方向。

答案 3 :(得分:1)

您可以通过更新node_modules属性来从test中排除特定文件夹。在下面的示例中,我们创建了一个包含所有供应商的单一块,除了Lodash模块。

webpack.config.js

module.exports = {
  //...
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/](!lodash)[\\/]/,
          name: 'vendor',
          chunks: 'all',
        }
      }
    }
  }
};

此示例基于SplitChunksPlugin example from the Webpack docs

答案 4 :(得分:0)

稍作修改的答案@ndequeker

test: /[\\/]node_modules[\\/](?!lodash)(.[a-zA-Z0-9.\-_]+)[\\/]/

对我有用