收集一些常见的基于vue-cli的优化项
vue-cli 配置项结构
1
2
3
4 const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
...
})
设置全局样式
依赖插件 style-resources-loader, vue-cli-plugin-style-resources-loader
1 | pluginOptions: { |
css样式抽取
vue-cli5 默认配置 生产环境抽取组件的 style 样式为css文件放在 dist/css 文件夹中,还可以设置
1 | css: { |
关于 chunkFilename 作用:不在
output.entry
中的文件,但是需要单独打包的文件名配置。(
设置使用require.ensure
或者import
异步加载模块打包后的名称。)
js组件打包
vue-cli5 默认组件打包后输出到 /dist/js下, 文件名格式
文件夹名-文件名.hash值.后缀
, 也可以手动配置。eg:defectControlConfiguration-consumptionUnit.2e496dd8.js
1 | 1、方式1 |
资源压缩
对静态资源的压缩,一般只在生产模式下配置
1 | configureWebpack: (config) => { |
开启gzip压缩
vue.config.js
安装压缩插件,注意:不用安装太高版本,不用安装太高版本,不用安装太高版本,最新版本安装后打包回出错,我这是选择5.0.2。可能跟你项目的webpack版本有关吧
1 | npm install --save-dev compression-webpack-plugin@5.0.2 |
1 | const CompressionWebpackPlugin = require('compression-webpack-plugin') |
nginx 配置
1 | server { |
公共代码抽离
将第三方模块,样式抽离成单个文件
1 | configureWebpack: (config) => { |
1 | //代码拆分功能 |
性能提示优化
但项目越来越大,资源越来越多时,打包可能会报错。此时可能需要调整性能提示。
原因: node编译的内存溢出了。原因就是打包文件过大,超出了内存的限制大小造成了编译中断。
1 | configureWebpack: (config) => { |
package.json
1 | { |
路由懒加载
这样就优雅了不少
普通懒加载,打包后名称
chunk_59de86678e4fdfa6_1.0.0_1686820955003.js
1 | { |
升级版, 这种方式注册的路由打包后名称
pmsLogin_59de86678e4fdfa6_1.0.0_1686820955003.js
1 | { |
懒加载动态路由打包时的问题
1 | export const loadView = (view) => { |
使用cdn加速
1 | let cdn = { |
index.html 模板
1 |
|
查看性能分析报告
通过查看性能分析报告确定哪些大模块使用cdn加速
1 | //package.json |
去除 console.log
1、方式1
npm i terser-webpack-plugin -D
1 | module.exports = { |
2、方式2
安装 babel-plugin-transform-remove-console
.babel.config.js
1 | const plugins = []; |
浏览器js兼容性配置
配置
browserslist
在根目录创建
.browserslistrc
文件 或者在package.json
中配置browserslist
字段。1
2
3
4# .browserslistrc
> 0.5%
last 2 versions
not dead1
2
3
4
5
6
7{
"browserslist": [
"> 0.5%",
"last 2 versions",
"not dead"
]
}启用自动 Polyfill
1
2
3
4
5
6
7// vue.config.js
module.exports = {
// 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。你可以启用本选项,以避免构建后的代码中出现未转译的第三方依赖。
// 不过,对所有的依赖都进行转译可能会降低构建速度。如果对构建性能有所顾虑,你可以只转译部分特定的依赖:给本选项传一个数组,列出需要转译的第三方包包名或正则表达式即可。
transpileDependencies: ['core-js', 'regenerator-runtime'], // 确保这些库被正确转译
};使用 Polyfill 方式
useBuiltIns: 'usage'
(按需按文件加载 polyfill)
Babel 会根据每个文件中使用的 JavaScript 特性,自动选择需要 polyfill 的部分,避免将所有 polyfill 引入到每个文件中。此时不需要在入口文件中显式地引入 polyfill。此模式下main.js不需要引入东西
1
2
3
4
5
6
7
8
9
10
11
12module.exports = {
presets: [
[
'@babel/preset-env',
{
useBuiltIns: 'usage', // (按需按文件加载 polyfill)
corejs: 3, // 使用 core-js 版本 3
},
],
],
};useBuiltIns: 'entry'
Vue CLI 会根据
browserslist
自动引入所需的 polyfill,并且你需要在项目的入口文件(如src/main.js
)中手动引入core-js
:1
2
3// src/main.js
import 'core-js/stable';
import 'regenerator-runtime/runtime';配置 Vue CLI 来启用自动 Polyfill
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// vue.config.js
module.exports = {
transpileDependencies: ['core-js', 'regenerator-runtime'], // 确保这些库被正确转译
chainWebpack: (config) => {
config.module
.rule('js')
.test(/\.js$/)
.use('babel-loader')
.loader('babel-loader')
.options({
presets: [
[
'@babel/preset-env',
{
useBuiltIns: 'entry', // 按需加载 polyfills
corejs: 3, // 使用 core-js 版本 3
},
],
],
});
},
};浏览器 css 兼容性配置
Vue CLI 支持通过 postcss.config.js 来配置 PostCSS 插件或package.json。你可以在项目根目录创建 postcss.config.js
文件,或者修改该文件以确保样式兼容。
3选1
1 | // postcss.config.js |
1 | // vue.config.js |
package.json 中配置browserslist后会自动触发 css后缀样式添加,如果配置了 js垫片添加,css可以不用配置了
1 | "browserslist": [ |
webpack-chain 语法
完整示例参考
1 | /* |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2023/06/15/programming/vue/vue-cli实践优化项/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!