先看一下优化配置之前的文件大小
通过vue-cli3脚手架创建的项目,可以通过在项目根目录下创建vue.config.js配置文件来修改优化webpack配置,主要优化流程分为以下几步进行,用于优化项目打包,减小体积大小
代码的最优化, 通过chainWebpak来处理. 这里使用的是webpack配置中的optimization来处理的
module.exports = {
chainWebpack: config => {
config.optimization.minimize(true);
}
}
效果如下
尺寸略有缩减,其他文件的大小也大多有所缩减
module.exports = {
chainWebpack: config => {
config.optimization.minimize(true);
config.optimization.splitChunks({
chunks: 'all'
})
}
}
效果如下
开启图片压缩,要先安装 image-webpack-loader 插件
npm install image-webpack-loader --save
然后加入如下配置
chainWebpack: config => {
//最小化代码
config.optimization.minimize(true);
//分割代码
config.optimization.splitChunks({
chunks: 'all'
});
// //压缩图片
config.module
.rule('images')
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({
bypassOnDebug: true
})
.end()
}
要开启gzip压缩, 这里我们需要引入一个插件: compression-webpack-plugin
npm install compression-webpack-plugin --save-dev
然后定义压缩插件
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const compress = new CompressionWebpackPlugin(
{
filename: info => {
return `${info.path}.gz${info.query}`
},
algorithm: 'gzip',
threshold: 10240,
test: new RegExp(
'\\.(' +
['js'].join('|') +
')$'
),
minRatio: 0.8,
deleteOriginalAssets: false
}
)
module.exports = {
publicPath: process.env.NODE_ENV === 'production' ?
'/' : '/',
//放置生成的静态资源 (js、css、img、fonts) 的目录
assetsDir: 'static',
//关闭生产环境的 source map 以加速生产环境构建
productionSourceMap: false,
chainWebpack: config => {
//最小化代码
config.optimization.minimize(true);
//分割代码
config.optimization.splitChunks({
chunks: 'all'
});
// //压缩图片
config.module
.rule('images')
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({
bypassOnDebug: true
})
.end()
},
configureWebpack: {
plugins: [compress]
}
}
然后在devServer加入如下配置即可看到gzip压缩效果
devServer: {
//在本地服务器开启gzip,线上服务器都支持gzip不需要设置
before(app) {
app.get(/.*.(js)$/, (req, res, next) => {
req.url = req.url + '.gz';
res.set('Content-Encoding', 'gzip');
next();
})
}
}
效果如下图
经过以上几步优化,文件体积已经缩减了不少,我们可以看一下打包后dist目录体积大小对比
vue.config.js文件的完整配置如下
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const compress = new CompressionWebpackPlugin({
filename: info => {
return `${info.path}.gz${info.query}`
},
algorithm: 'gzip',
threshold: 10240,
test: new RegExp(
'\\.(' + ['js'].join('|') +
')$'
),
minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
deleteOriginalAssets: false // 删除原文件
});
module.exports = {
//该配置能帮助你为项目中的所有资源指定一个基础路径,它被称为公共路径
publicPath: process.env.NODE_ENV === 'production' ?
'/' : '/',
//放置生成的静态资源 (js、css、img、fonts) 的目录
assetsDir: 'static',
//关闭生产环境的 source map 以加速生产环境构建
productionSourceMap: false,
chainWebpack: config => {
//最小化代码
config.optimization.minimize(true);
//分割代码
config.optimization.splitChunks({
chunks: 'all'
});
//压缩图片
config.module
.rule('images')
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({
bypassOnDebug: true
})
.end()
},
configureWebpack: {
// 通过 compression-webpack-plugin 插件对js文件进行gzip压缩
plugins: [compress]
},
devServer: {
proxy: {
'/mock/*': {
target: 'https://easy-mock.com/',
changeOrigin: true,
ws: true,
pathRewrite: {}
}
},
//在本地服务器开启gzip,线上服务器都支持gzip不需要设置
before(app) {
app.get(/.*.(js)$/, (req, res, next) => {
req.url = req.url + '.gz';
res.set('Content-Encoding', 'gzip');
next();
})
}
}
}
原文链接:https://blog.csdn.net/qq_35718410/article/details/99844054