经过一天的研究,我想提供一个我认为更准确的答案。Webpack团队发布了一个有用(但很难注意到)的术语表。
我认为有关块和捆绑包的混淆在于这些术语可以指同一件事,在Webpack进程的不同阶段应该使用不同的术语。
Webpack术语表定义
模块:提供比完整程序更小的表面积的离散功能块。编写良好的模块提供了稳定的抽象和封装边界,构成了一种连贯的设计和明确的目的。
块:这是Webpack特定的术语,用于内部管理过程。捆绑包由多个块组成,其中有几种类型(例如入口和子级)。通常,块直接对应于输出捆绑包,但有一些配置不会产生一对一的关系。
捆绑包:由许多不同的模块生成,捆绑包包含已经进行加载和编译处理的源文件的最终版本。
(我添加的强调)
解释
我将区别总结为:块是Webpack过程中的一组模块,捆绑包是一个已发射的块或一组块。
在谈论Webpack过程正在发生时,这种区别是有用的。随着模块被分块在一起,它们可能会发生重大变化(特别是在插件处理期间),因此在这个阶段称它们为捆绑包并不准确,这些块甚至可能不会作为捆绑包在最终输出中发出!然后,在Webpack完成后,拥有一个术语来指代所有已发射的最终文件(捆绑包)是很有用的。
你的示例
因此,对于你的示例:
{
entry: {
foo: ["webpack/hot/only-dev-server.js","./src/foo.js"],
bar: ["./src/bar.js"]
},
output: {
path: "./dist",
filename: "[name].js"
}
}
- 模块: "webpack/hot/only-dev-server.js", "./src/foo.js", "./src/bar.js" (以及任何其他这些入口点的依赖模块!)
- 代码块: foo、bar
- 打包文件: foo、bar
在你的示例中,代码块和打包文件之间存在一对一的关系,但并非总是如此。例如,添加源映射会导致一个代码块与一个打包文件之间存在1:2的关系。
资源