webpack - 使用 Webpack 4 进行静态代码拆分
问题描述
我真的对 Webpack 的代码拆分功能感到困惑。有人可以帮我举一个具体的例子吗?
将捆绑包拆分为基础和扩展
我的应用程序的大多数部分只需要lodash
作为外部依赖项。假设只有一个文件base.js
:
import * as _ from 'lodash';
console.log(_.toUpper('Hello world!'));
然而,应用程序的一部分也需要moment
. 让我们再次考虑一个文件extension.js
:
import * as _ from 'lodash';
import * as moment from 'moment';
console.log(_.toUpper(moment().format()));
现在我想把它捆绑起来得到两个不同的文件
base.bundle.js
包含base.js
和lodash
extension.bundle.js
包含extension.js
和moment
在大多数页面上,我只会包含base.bundle.js
并期望只看到一行控制台输出。不过,在某些页面上,我将同时包含这两个包,并希望看到控制台输出的两行。
这可能吗?我怎样才能实现这样的设置?
到目前为止我尝试了什么
简单地定义两个不同的入口点将添加
lodash
到两个包中。entry: { base: './src/base.js', extension: './src/extension.js' }
通过简单的
splitChunks
优化定义两个不同的入口点将构建四个.bundle.js
文件而不是两个:entry: { base: './src/base.js', extension: './src/extension.js' }, optimization: { splitChunks: { chunks: 'all' } }
通过相同的入口点添加这两个文件并为扩展包定义一个显式的 chunkGroup 将生成两个
.bundle.js
文件,每个文件都包含正确的块。但是,通过这种方法,无法base.bundle.js
单独使用(完全没有控制台输出)。entry: { base: ['./src/base.js', './src/extension.js'] }, optimization: { splitChunks: { cacheGroups: { default: false, commons: { chunks: 'all', name: 'extension', test: /extension\.js|moment/ } } } },
解决方案
推荐阅读
- csv -  或 ? 使用骆驼从 s3 读取 csv 文件时,字符被添加到第一列
- excel - 如何根据其他列的颜色更改列的颜色?
- mysql - 如何解决 CentOS 8 中的这个 Mysql2 gem 错误?
- python - 为什么允许列表附加自身?
- python - 在 Pandas 中对 MultiIndex 进行分组
- excel - 在一个范围内的特定单元格中输入条件值,解锁另一个范围内的另一个特定单元格(VBA,范围偏移)
- angular - Angular 8 - 为 HTTP API 调用设置代理
- amazon-web-services - 有没有办法为多个脚本指定一个提供者?
- scrollview - 嵌套的 ScrollView SwiftUI
- reactjs - 反应:在 config-overrides.js 文件中为多个 html 文件添加多个入口点