vue-cli2 构建速度优化的实现方法
对于使用vue-cli脚手架创建的前端项目,编译发布几乎是必需操作,有的编译只需要几秒钟,快如闪电,有的却需要好几分钟,慢如蜗牛。如果是线上进行热修复,那更是分秒必争,网页响应的速度直接影响了用户体验,用户不会那么有耐心长时间等着,让你慢慢编译。
网上流传vue-cli一些优化配置,有些在新版本的vue-cli和webpack3已经不再需要了,有些是针对webpack4的。对于新版本的vue-cli和webpack3,以下简单配置优化后,即可大幅提升构建速度。
- 按需引用及动态路由
- 启用uglifyjs-webpack-plugin缓存
- 关闭source-map
- 利用DllPlugin和DllReferencePlugin提取公用库
一、动态路由
1、修改src/router/index.js
importVuefrom'vue'
importRouterfrom'vue-router'
//webpackChunkName打包后的文件名
constMenu=()=>import(/*webpackChunkName:'Menu'*/'@/pages/menu/index.vue')
exportdefaultnewRouter({
routes:[
{
path:'/',
name:'Menu',
component:Menu
}
]
})
2、配置.babelrc(可选)
{
...
"comments":true,//输出编译信息
"plugins":["transform-vue-jsx","transform-runtime"]
}
3、修改build/webpack.prod.conf.js
output:{
path:config.build.assetsRoot,
filename:utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename:utils.assetsPath('js/[name].js')//使用webpackChunkName定义的文件名
},
二、启用uglifyjs-webpack-plugin缓存
newUglifyJsPlugin({
parallel:true,//并行
cache:true//缓存
}),
三、关闭source-map
修改src/config/index.js中productionSourceMap值
productionSourceMap:false
四、公用库提取
1、安装clean-webpack-pluginadd-asset-html-webpack-plugin
yarnaddclean-webpack-pluginadd-asset-html-webpack-plugin@2.1.0--dev
2、build目录下创建webpack.dll.conf.js
constwebpack=require('webpack')
constpath=require('path')
constCleanWebpackPlugin=require('clean-webpack-plugin')
constdllPath=path.resolve(__dirname,'../src/assets/dll')//dll文件存放的目录
process.env.NODE_ENV='production'//NODE_ENV设置为production减少依赖
module.exports={
entry:{//把vue相关模块的放到一个单独的动态链接库
vue:['babel-polyfill','vue','vue-router','vuex','axios','element-ui']
},
output:{
filename:'[name]-[hash].dll.js',//生成vue.dll.js
path:dllPath,
library:'_dll_[name]'
},
plugins:[
newCleanWebpackPlugin(['*.js'],{//清除之前的dll文件
root:dllPath
}),
newwebpack.DefinePlugin({
'process.env':{
NODE_ENV:JSON.stringify(process.env.NODE_ENV)//设置环境变量
}
}),
newwebpack.DllPlugin({
name:'_dll_[name]',//manifest.json描述动态链接库包含了哪些内容
path:path.join(__dirname,'./','[name].dll.manifest.json')
}),
//压缩代码
newwebpack.optimize.UglifyJsPlugin({
compress:{
warnings:false,
pure_funcs:['console.log']
},
sourceMap:false
})
]
}
3、在package.json中新增dll构建命令
"scripts":{
"dll":"webpack--configbuild/webpack.dll.conf.js"//dll打包命令
},
4、修改build/webpack.prod.conf.js
constAddAssetHtmlPlugin=require('add-asset-html-webpack-plugin')
plugins:[
//引用manifest.json
newwebpack.DllReferencePlugin({
manifest:require('./vue.dll.manifest.json')
}),
//将dll注入到生成的html模板中
newAddAssetHtmlPlugin({
filepath:path.resolve(__dirname,'../src/assets/dll/*.js'),//dll文件位置
publicPath:config.build.assetsPublicPath+utils.assetsPath('dll/'),//dll引用路径
outputPath:config.build.assetsPublicPath+utils.assetsPath('dll/'),//dll最终输出的目录
includeSourcemap:false
//hash:true,
}),
...
]
五、编译
yarnrundll//运行一次生成dll文件即可,下次构建时不必运行 yarnrunbuild
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。