本文共 1944 字,大约阅读时间需要 6 分钟。
我们有以下文件:
其中 a.js 是入口文件,它依赖 b.js 和 c.js,并且 c.js 是异步加载的。b.js 又依赖 d.js,而 d.js 是一个简单的模块函数。
在 webpack.config.js 中,Webpack 的入口设置为 a.js,并使用以下输出选项:
module.exports = { entry: { app: './src/a.js' }, output: { filename: '[name].[chunkhash].js', chunkFilename: '[name].bundle.[chunkhash:8].js', publicPath: '/' }, optimization: { runtimeChunk: { name: 'bundle' } }}
Webpack 将每个文件(如 a.js、b.js、c.js、d.js)视为一个模块。每个模块可以是普通模块(NormalModule)或依赖模块(ImportDependenciesBlock)。
Chunk 表示 Webpack 打包后的文件组。每个 Chunk 对应一个文件组,可能包含多个模块。Chunk 还可以是 runtime chunk(用于 Webpack runtime 的代码)。
ChunkGroup 是 Chunk 的容器,一个 ChunkGroup 可能包含多个 Chunk。每个 ChunkGroup 对应一个入口文件。
ChunkGroup (app) 包含以下 Chunk:
Chunk (app) 包含 a.js 和 b.js。
Chunk (c.js) 包含 c.js 和 d.js。
Chunk (b.js) 包含 b.js 和 d.js。
要调试 Webpack 源码,可以在 package.json
中添加 debug 脚本:
"debug": "node --inspect-brk ./node_modules/webpack/bin/webpack.js"
运行 npm run debug
,然后在浏览器中访问 chrome://inspect/#devices
,选择 Node 运行环境,开始调试。
通过上述分析,可以看出 Webpack 是如何根据模块依赖关系,构建 Chunk 和 ChunkGroup 的。每个 Chunk 对应一个文件组,而每个 ChunkGroup 又对应一个入口文件。这种结构使得 Webpack 能够高效地打包和优化应用程序。
转载地址:http://unbfk.baihongyu.com/