前言
以下实现方式都是基于 vue-cli5 搭建 内置webpack5,如有版本不同,大家可以自行查找相对应版本的配置方式。
一、vue.config.js设置 productionSourceMap 为false
主要作用去除打包后生成的 map 文件,减少代码体积
map文件的作用:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。 有了map就可以像未加密的代码一样,准确的输出是哪一行哪一列有错。
使用:
module.exports = defineConfig({
productionSourceMap: false,
})
配置前后打包文件大小对比:
总结:
在设置了vue.config.js之后,就不会生成map文件,map文件的作用在于:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。也就是说map文件相当于是查看源码的一个东西。如果不需要定位问题,并且不想被看到源码,就把productionSourceMap 置为false,既可以减少包大小,也可以加密源码
二 、配置 image-webpack-loader 图片压缩
尽量使用cnpm 下载 ,这个包内置中有个image-giftce(忘了是不是这样拼了) ,有几个文件可能会下载不下来 ,打包运行时会报undefined ,所以推荐cnpm ,下不来的话多下几次 。
使用:
cnpm install image-webpack-loader
module.exports = defineConfig({
chainWebpack: (config) => {
config.module
.rule('min-image')
.test(/.(png|jpe?g|gif|svg)(?.*)?$/)
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({ disable: process.env.NODE_ENV == 'development' ? true : false })//此处为ture的时候不会启用压缩处理,目的是为了开发模式下调试速度更快,网上错误示例直接写为disable:true,如果不去查看文档肯定是要被坑的
.end()
config.plugins.delete("prefetch") //删除预加载 提升首次加载速度
},
});
压缩前后文件大小对比:
总结:
压缩图片的方案有很多实现方式,也可以在使用图片前就压缩好放进项目中,也可以选择配置压缩的方法,归根到底目的是要把项目体积变小,实现方式大家自由选择,目的是不变的。
三、排查无用文件 安装插件useless-files-w5-webpack-plugin
避免无用文件占据体积,当然这也可以从开发过程中就避免,但我个人觉得太麻烦,有时候也会忽略了,所以还是配置文件一次查找,清除。
由于我的项目是基于webpack5开发的,webpack5以下的可以使用useless-files-webpack-plugin这个插件
使用:
npm i useless-files-w5-webpack-plugin -D
module.exports = defineConfig({
configureWebpack:{
plugins: [
new UnusedFilesW5WebpackPlugin({
root: ['./src'], // 项目目录
output: './fileList.json', // 输出文件列表
clean: false, // 是否删除文件, 不建议开启,手动删除比较好,防止误删
exclude: ['node_modules'] // 排除文件列表
})
]
}
})
输出无用文件如下:
四、利用缓存提升二次构建速度
利用webpack5 内置缓存配置
文档连接-->webpack.docschina.org/configurati…
第一次 68181ms --> 第二次 9226ms
module.exports = defineConfig({
configureWebpack: {
cache: {
type: 'filesystem',
allowCollectingMemory: true
},
}
})
五、引入cdn 减少打包体积
<body>
<noscript>
<strong
>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
properly without JavaScript enabled. Please enable it to
continue.</strong
>
</noscript>
<div id="app"></div>
//引入echarts
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.1/echarts.min.js"></script>
</body>
module.exports = defineConfig({
configureWebpack: {
externals: {
"./cptable": "var cptable",
'echarts': 'echarts'
},
},
});
最后项目总体优化前后对比
dist文件:18.8M --> 3.69M
提升二次构建缓存
解析编译速度 68181ms --> 9226ms