webpack - 如何编码拆分 Webpack 4 中的两个条目之一?

标签 webpack code-splitting webpack-4

我有一个看似非常简单的 Webpack 代码拆分设置,但在迁移到 Webpack 4 时遇到问题。我有两个条目,称为 mainpreview .我想将初始代码拆分为 vendor main 中 vendor 模块的 block ,但我想保留 preview作为一个单独的 block 。

Webpack 3 中工作配置的相关部分:

{
  entry: {
    main: './src/application.js',
    preview: './src/preview.js',
  },
  plugins: [{
    new webpack.optimize.CommonsChunkPlugin({
      name: 'vendor',
      chunks: ['main'],
      minChunks({context}) {
        if (!context) {
          return false;
        }
        const isNodeModule = context.indexOf('node_modules') !== -1;
        return isNodeModule;
      },
    }),
  }]
}

具体来说,使用 chunks CommonsChunkPlugin 中的属性(property)options 让我可以轻松地做我需要做的事情。 Webpack 4 的 optimization.splitChunks 中是否有等价物?配置?

最佳答案

以下 Webpack 4 配置仅拆分 main模块 vendor 依赖项到一个单独的 block 中。 preview 的其他依赖项保留在该 block 内。

{
    entry: {
        main: './test/application.js',
        preview: './test/preview.js'
    },
    optimization: {
        splitChunks: {
            cacheGroups: {
                vendors: {
                    name: 'vendors',
                    chunks: 'all',
                    enforce: true,
                    priority: 1,
                    test(module, chunks) {
                        const name = module.nameForCondition && module.nameForCondition();
                        return chunks.some(chunk => chunk.name === 'main' && /node_modules/.test(name));
                    }
                }
            }
        }
    }
}

除非我们配置 preview,否则共享依赖项包含在 vendor 捆绑包中。 cacheGroup 具有更高的优先级,以强制此处包含的所有依赖项都应保留在此 block 中。

有关更多 Webpack 4 相关信息/配置,您可以查看 webpack-demo项目。

为了强制从 main 中拆分所有 vendor 依赖项并从 main 重复使用它们和 preview必须配置 preview 的 block 缓存组为:
preview: {
    name: 'preview',
    chunks: 'all',
    enforce: true,
    priority: 0,
    test(module, chunks) {
        return chunks.some(chunk => chunk.name === 'preview');
    }
}

注意 preview 的 cacheGroup block 的优先级低于 vendors一个以确保所有 main依赖关系也是 preview 中的依赖关系也引用自 preview捆。

关于webpack - 如何编码拆分 Webpack 4 中的两个条目之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49298706/

相关文章:

reactjs - 生产 webpack main.bundle.js 包含文件的完整路径

javascript - 使用 typescript 和 webpack 进行代码拆分

webpack - 构建时 CleanWebpackPlugin 配置失败

symfony - 使用Webpack Encore ^ 0.21.0时,未知的“encore_entry_link_tags”功能

javascript - 多配置期间的 webpack watch 选项

reactjs - React 风格、Webpack、React - 未捕获错误 : Invariant Violation: The `style` prop

javascript - 为什么 webpack 在打包时不包含assert.rejects(UMD 库目标)

reactjs - 在登录之前和之后使用 bundle 分割react-admin应用程序的代码

javascript - gulp 是否对 javascript 文件进行代码拆分?

webpack - 任何 Webpack splitchunks.name 作为网站以外的功能文档?