Vite工具配置rollupOptions分包打包的方法
分包的好处
- 打包后有时会存在个别文件较大的情况, 这会导致依赖模块加载时变慢, 所以就需要将大的包分开
- 引入的模块通常没有改动, 改动多的是自己的代码, 可以把不会经常改动的部分单独分包出来, 避免每次打包所有的文件都会改动
(但是, 也不能分的太细, 分的越多浏览器需要发起的请求就越多, 会影响加载速度, 且会影响浏览器的缓存效率)
配置rollupOptions
export default defineConfig({ |
output中基本的配置选项
output: { |
manualChunks
我想把model_1
模块和model_2
模块打包成叫name
的文件可以这么写
manualChunks: { |
当然也可以单独打包成name_1
和name_2
manualChunks: { |
将在node_modules文件夹里且被导入的模块打包
hint: manualChunks可以接受一个
参数
, 表示正在处理的模块的标识符(identifier),
通常是模块的路径, 下面例子里参数起的名字是id
打包成单个, 叫name
的包
manualChunks(id) { |
hint: 参数id表示模块的路径, 这部分代码是将id中包含子字符串node_modules的模块全部打包到一个叫name的包(可能导致分出的包较大)
不同的模块单独打包
manualChunks(id) { |
hint: 通过字符串和数组操作, 将node_modules模块里面不同名字的包单独打包成相应名字的包(可能会导致分出的包较多)
分别打包module_1
和module_2
其他的模块和入口文件打包
通过上面写的将不同的模块单独打包后发现module_1和module_2都比较大, 其他的都很小. 可以选择将module_1和module_2分别打包, 把其他小的和入口文件一起打包
manualChunks(id) { |
hint: 将node_modules文件夹里的模块module_1打包成name_1, 模块module_2打包成name_2, 其他模块会打包到入口文件里面
chunkFileNames
将分好的包直接输出到相同路径下
这个[name].js
中的[name]是特殊的占位符, 不是我举的例子, [name]会自动替换成动态导入的模块名称和上面手动分包自定义的文件名
chunkFileNames: 'static/js/[name].js', |
hint: 将manualChunks里设定的打包出来的文件全部输出到
static/js/
路径里面名字也可以弄成
[name].[hash].js
,[name]-[hash].js
等,增加的
[hash]
这个部分就是加文件指纹(项目构建内容有改动这个值就会变, 不改就不会变), [hash]用于浏览器的缓存控制, 因为项目变化文件名就会变化, 浏览器就会加载该文件, 让项目不受到浏览器缓存的影响, 显示最新的内容中间加的'-', '.'相应的文件名字上[name]和[hash]之间会有'-', '.' 例如mname
-
374dije279ss.js, mname.
fwjvh13diew.js之类的
根据包的路径和名称输出到不同路径下
可以像上面manualChunks(id)似的用函数声明
的方法写, 这个例子用的是箭头函数声明
的方法
chunkFileNames: (chunkInfo) => { |
hint: facadeModuleId在Vite中是一个与分包文件相关的属性, 当一个模块是通过动态导入的方式加载的, Vite 会为这个模块创建一个分包, 并且将该模块的路径设置为,
分包对象.facadeModuleId
(这个例子中给分包对象起名为chunkInfo)
assetFileNames
例1:
assetFileNames: (assetInfo) => { |
例2:
assetFileNames: 'static/[ext]/[name][extname]', |
例3:
assetFileNames: 'static/[ext]/[name].[ext]', |
hint: 在这个函数中
[ext]
为资源文件的扩展名,[extname]
是'.'+资源文件的扩展名
例2和例3是等效的
entryFileNames
打包好的入口文件通常放在输出文件夹下的根目录
entryFileNames: '[name].js' |