前言
随着项目的体积越来越大,打包的时间也越来越长,体积也越来越大。所以必不可少的优化工作。这分为了打包时优化,和打包体积优化,以及开发可能要用到的常用插件,这里测试用的的版本是vue-cli 2.9.6 版本项目。
打包时优化
节省打包所花的时间,这里有分为了缓存,多进程实例打包,dll分包。
1.多进程实例:使用 (HappyPack/thread-loader) 解析资源
- 原理: 每次webpack解析一个模块,HappyPack会将它及它的依赖分配给worker线程中
- 项目中配置
- 对比 启动之后,可能这并没有很大的体现,因为静态资源比较多,组件少
2.分包:预编译资源模块使用(DLLPlugin 和 DllReferencePlugin)
DLLPlugin:进行将一些基础包如
vue
,vue-router
,vuex
,等打包或者一些业务包,这样webpack
在打包时就不会进行对它进行分析DllReferencePlugin:将DLLPlugin
打包后的文件加载到项目中 在build 文件下 新增一个配置文件webpack.dll.conf.js
,配置如下
const path = require('path')
const webpack = require('webpack')
module.exports = {
context:process.cwd(),
resolve: {
extensions:['.js','.jsx','.json','.less','.css'],
modules:[__dirname,'node_modules']
},
entry: {
library: [
'vue',
'vue-router',
'vuex'
]
},
output:{
filename:'manifest.dll.js',
path:path.resolve(__dirname, './libs/library'),
library:'[name]'
},
plugins:[
new webpack.DllPlugin({
name: '[name]',
path: path.resolve(__dirname, './libs/library/manifest.json')
})
]
}
- 在webpack.prod.conf.js 文件中增加插件配置如下
- package.json 配置如下
- 运行指令 npm run dll
3.缓存
作用:就是优化二次构建的速度,常用的缓存有 babel-loader 开启缓存
二、打包体积优化
项目的组成基本由,js、css、html,以及一些图片,字体文件等组成,如果已经使用了脚手架工具那么很多都是继承的。 js,css,html 相对于已经比较优的配置。介绍下可能没有的配置
1.图片压缩 image-webpack-loader
配置之后三、开发技巧使用
1、资源内联,资源内联意义:减少http网络请求数,css内联避免页面闪动,等。
html内联 raw-loader
js的内联:raw-loader
2. 基础库的分离html-webpack-externals-plugin
作用: 将一些基础库或者一些公共资源分离,避免一次性加载一个很大的文件,优化体验。