开局一张图
图作者为水印上的人(侵删,谢谢)
我们写的文件就是一个个的module
,当这些module到达webpack
进行打包的时候,webpack会根据各个文件之间的引用关系生成chunk
,而webpack处理好chunk
之后就会输出bundle
,bundle
是经过加载和编译之后的最终源文件,可以直接在浏览器中运行的
一般来说一个chunk
对应一个bundle
,当然也有一个chunk
对应几个bundle
的
总结: module
|chunk
|bundle
是同一份逻辑代码在不同场景下的名字
module
chunk
bundle
[id].js
(这个id是指webpack打包时候的chunk的id)output
内指定chunkFilename
,打包出来就是对应的名称webpackChunkName: 按照上面chunkFilename
的写法在多个异步加载文件的时候都是一个名字
1 | output: { |
如果我们加上一个变量
1 | output: { |
这个时候就需要用到webpackChunkName了
1 | // 在 import 的括号里 加注释 /* webpackChunkName: "lodash" */ ,为引入的文件取别名 |
打包出来的文件名就是vendors~lodash.bundle.js
,为什么有vendors~
呢? 因为webpack内部懒加载有一个插件叫SplitChunksPlugin,里面有一些配置比如automaticNameDelimiter
默认分割符就是~
webpackPrefetch:预拉取
普通的异步加载:在头部增加一个script
标签
1 | // 异步加载 |
加了webpackPrefetch的异步加载: