88人参与 • 2025-04-24 • Javascript

在 webpack 项目中,webpack.config.js 是核心配置文件,而非 webpack.json。chunks 的概念与 webpack 的代码分割(code splitting)功能密切相关,通过 optimization.splitchunks 配置项可以实现对代码块的分类和优化。以下是 webpack 中 chunks 的分类和配置使用详解:
在 webpack 中,chunks 通常分为以下三类:
initial chunks(初始块)
entry)直接引入的代码。async chunks(异步块)
import())方式加载的代码。runtime chunks(运行时块)
optimization.runtimechunk 配置可以提取运行时代码到单独的文件。optimization.splitchunks 是 webpack 4+ 提供的代码分割优化配置项,用于控制如何拆分代码块。
module.exports = {
optimization: {
splitchunks: {
chunks: 'all', // 可选值:'all' | 'async' | 'initial'
minsize: 20000, // 生成块的最小体积(字节)
maxsize: 0, // 生成块的最大体积(字节),超出会尝试拆分
minchunks: 1, // 被引用次数达到多少时才提取为单独块
maxasyncrequests: 30, // 异步请求的最大并行数
maxinitialrequests: 30, // 入口点的最大并行请求数
automaticnamedelimiter: '~', // 块名称的分隔符
cachegroups: { // 缓存组配置
defaultvendors: {
test: /[\\/]node_modules[\\/]/, // 匹配第三方库
priority: -10, // 优先级
filename: 'vendors.js', // 自定义输出文件名
},
default: {
minchunks: 2, // 被引用至少2次时提取
priority: -20,
reuseexistingchunk: true, // 复用已存在的块
},
},
},
},
};chunks
'all':对同步和异步代码都进行分割。'async':仅对异步代码进行分割(默认值)。'initial':仅对同步代码进行分割。minsize
maxsize
cachegroups
vendors.js。将 node_modules 中的代码提取到单独的文件:
cachegroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all',
},
},将多个入口文件中共享的代码提取到 common.js:
// 示例代码
button.addeventlistener('click', () => {
import('./analytics.js').then(({ trackevent }) => {
trackevent('click');
});
});使用 import() 动态加载模块,webpack 会自动生成异步块:
// 示例代码
button.addeventlistener('click', () => {
import('./analytics.js').then(({ trackevent }) => {
trackevent('click');
});
});将 webpack 运行时代码提取到单独的文件:
module.exports = {
optimization: {
runtimechunk: 'single', // 提取为单个文件 runtime.js
},
};减少初始加载体积
import() 实现按需加载。提高缓存利用率
contenthash 名称,确保文件内容变化时才更新缓存。控制并行请求数
maxasyncrequests 和 maxinitialrequests,避免过多的并行请求。分析打包结果
webpack-bundle-analyzer 插件可视化分析打包结果,优化分块策略。const path = require('path');
const { bundleanalyzerplugin } = require('webpack-bundle-analyzer');
module.exports = {
entry: {
main: './src/index.js',
admin: './src/admin.js',
},
output: {
filename: '[name].[contenthash].js',
path: path.resolve(__dirname, 'dist'),
clean: true,
},
optimization: {
splitchunks: {
chunks: 'all',
cachegroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
},
common: {
name: 'common',
minchunks: 2,
priority: -10,
},
},
},
runtimechunk: 'single',
},
plugins: [
new bundleanalyzerplugin(), // 分析打包结果
],
};chunks 的分类:初始块、异步块、运行时块。splitchunks 配置:通过 chunks、minsize、cachegroups 等选项控制代码分割。通过合理配置 splitchunks,可以显著提升 webpack 打包的性能和用户体验。
到此这篇关于webpack 中 chunks详解的文章就介绍到这了,更多相关webpack chunks详解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论