vue打包通过image-webpack-loader插件对图片压缩优化操作
vue正常打包之后一些图片文件很大,使打包体积很大,通过image-webpack-loader插件可将大的图片进行压缩从而缩小打包体积
step1:
npminstallimage-webpack-loader--save-dev
step2:
在build/webpack.base.conf.js中改如下配置
module.exports={ module:{ { test:/\.(png|jpe?g|gif|svg)(\?.*)?$/, //loader:'url-loader', //options:{ //limit:100000, //name:utils.assetsPath('img/[name].[hash:7].[ext]') //} loader:['url-loader?limit=10000&name='+utils.assetsPath('img/[name].[hash:7].[ext]'), 'image-webpack-loader' ] }, ] }, }
补充知识:vuecli3项目打包优化配置要点
一、新建项目
使用vue-cli3构建一个初始的Vue项目
因为使用了cli3,很多目录结构不见了,而相关配置是放在vue.config.js里面的,因此在根目录,新建一个vue.config.js
module.exports={}
二、正式优化
1、将productionSourceMap设为false
(1)在vue.config.js中module.exports写入:
module.exports={ productionSourceMap:false }
2、图片压缩
vue正常打包之后一些图片文件很大,使打包体积很大,通过image-webpack-loader插件可将大的图片进行压缩从而缩小打包体积
(1)先安装依赖:cnpminstallimage-webpack-loader--save-dev
(2)在vue.config.js中module.exports写入:
module.exports={ productionSourceMap:false, chainWebpack:config=>{ //============压缩图片start============ config.module .rule('images') .use('image-webpack-loader') .loader('image-webpack-loader') .options({bypassOnDebug:true}) .end() //============压缩图片end============ } }
3、cdn配置(可选)
(1)在vue.config.js最上边写入:
//是否为生产环境 constisProduction=process.env.NODE_ENV!=='development' //本地环境是否需要使用cdn constdevNeedCdn=false //cdn链接 constcdn={ //cdn:模块名称和模块作用域命名(对应window里面挂载的变量名称) externals:{ vue:'Vue', vuex:'Vuex', 'vue-router':'VueRouter' }, //cdn的css链接 css:[], //cdn的js链接 js:[ 'https://cdn.staticfile.org/vue/2.6.10/vue.min.js', 'https://cdn.staticfile.org/vuex/3.0.1/vuex.min.js', 'https://cdn.staticfile.org/vue-router/3.0.3/vue-router.min.js' ] }
(2)在vue.config.jsmodule.exportschainWebpack中写入:
//============注入cdnstart============ config.plugin('html').tap(args=>{ //生产环境或本地需要cdn时,才注入cdn if(isProduction||devNeedCdn)args[0].cdn=cdn returnargs }) //============注入cdnstart============
(3)在vue.config.jsmodule.exportsconfigureWebpack中写入:
configureWebpack:config=>{ //用cdn方式引入,则构建时要忽略相关资源 if(isProduction||devNeedCdn)config.externals=cdn.externals }
(4)当前配置的vue.config.js
//是否为生产环境 constisProduction=process.env.NODE_ENV!=='development' //本地环境是否需要使用cdn constdevNeedCdn=false //cdn链接 constcdn={ //cdn:模块名称和模块作用域命名(对应window里面挂载的变量名称) externals:{ vue:'Vue', vuex:'Vuex', 'vue-router':'VueRouter' }, //cdn的css链接 css:[], //cdn的js链接 js:[ 'https://cdn.staticfile.org/vue/2.6.10/vue.min.js', 'https://cdn.staticfile.org/vuex/3.0.1/vuex.min.js', 'https://cdn.staticfile.org/vue-router/3.0.3/vue-router.min.js' ] } module.exports={ productionSourceMap:false, chainWebpack:config=>{ //============压缩图片start============ config.module .rule('images') .use('image-webpack-loader') .loader('image-webpack-loader') .options({bypassOnDebug:true}) .end() //============压缩图片end============ //============注入cdnstart============ config.plugin('html').tap(args=>{ //生产环境或本地需要cdn时,才注入cdn if(isProduction||devNeedCdn)args[0].cdn=cdn returnargs }) //============注入cdnstart============ }, configureWebpack:config=>{ //用cdn方式引入,则构建时要忽略相关资源 if(isProduction||devNeedCdn)config.externals=cdn.externals } }
(5)在publicindex.html写入
favicon.ico"/> <%for(variinhtmlWebpackPlugin.options.cdn&& htmlWebpackPlugin.options.cdn.css){%> <%}%> cli3_base