下面介绍的只是我自己用到的,还有更过的插件参考官网:cn.vitejs.dev/plugins/
vite.config.ts 基础配置
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
base: './',
plugins: [vue()]
})
别名
import {resolve} from 'path'
resolve: {
alias: {
'@': resolve(__dirname, 'src/components')
}
}
Tree Shaking
vite 已经默认开启了这个功能,无需其他配置
// package.json
"sideEffects": [
"**/*.css"
]
cdn 加速
npm i vite-plugin-cdn-import -D
//vite.config.js
plugins: [
viteCDNPlugin({
// 需要 CDN 加速的模块
modules: [
{
name: 'lodash',
var: '_',
path: `https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js`
},
{
name: "element-plus",
var: 'ElementPlus',
path: "https://unpkg.com/element-plus",
css: "https://unpkg.com/element-plus/dist/index.css"
}
]
})
]
///////////////////////
npm install rollup-plugin-external-globals -D
import externalGlobals from 'rollup-plugin-external-globals';
const globals = externalGlobals({
moment: 'moment',
// 'video.js': 'videojs',
// jspdf: 'jspdf',
// xlsx: 'XLSX',
react:react,
react-dom:refact-dom
});
export default defineConfig({
build: {
rollupOptions: {
external: ['moment', 'react','react-dom'],
plugins: [globals],
}
}
});
//在 index.html 模版中引入对应库的CDN
<script src="//cdn.haier.net/assets/overlay/dts-fe/common-assets/es5-shim/4.5.14/es5-shim.min.js"></script>
<script src="//cdn.haier.net/assets/overlay/dts-fe/common-assets/es5-shim/4.5.14/es5-sham.min.js"></script>
<script src="//cdn.haier.net/assets/overlay/dts-fe/common-assets/@babel/polyfill/7.21.1/polyfill.min.js"></script>
打包代码压缩
npm i vite-plugin-compression -D
//vite.config.ts
import { createCompression } from 'vite-plugin-compression'
plugins: [
vue(),
viteCompression({
//生成压缩包gz
verbose: true, // 输出压缩成功
disable: false, // 是否禁用
threshold: 1, // 体积大于阈值会被压缩,单位是b
algorithm: 'gzip', // 压缩算法
ext: '.gz',// 生成的压缩包后缀
}),
]
压缩图片
npm i vite-plugin-imagemin -D
// vite.config.ts
npm install vite-plugin-minipic -D
import { defineConfig,loadEnv} from 'vite'
import viteImagemin from 'vite-plugin-imagemin'
export default ({ mode }) => defineConfig({
plugins: [
viteImagemin({
gifsicle: { // gif图片压缩
optimizationLevel: 3, // 选择1到3之间的优化级别
interlaced: false, // 隔行扫描gif进行渐进式渲染
// colors: 2 // 将每个输出GIF中不同颜色的数量减少到num或更少。数字必须介于2和256之间。
},
optipng: { // png
optimizationLevel: 7, // 选择0到7之间的优化级别
},
mozjpeg: {// jpeg
quality: 20, // 压缩质量,范围从0(最差)到100(最佳)。
},
pngquant: {// png
quality: [0.8, 0.9], // Min和max是介于0(最差)到1(最佳)之间的数字,类似于JPEG。达到或超过最高质量所需的最少量的颜色。如果转换导致质量低于最低质量,图像将不会被保存。
speed: 4, // 压缩速度,1(强力)到11(最快)
},
svgo: { // svg压缩
plugins: [
{
name: 'removeViewBox',
},
{
name: 'removeEmptyAttrs',
active: false,
},
],
},
}),
]
})
生产环境下清空console.log
build: {
chunkSizeWarningLimit: 1000, // 提高超大静态资源警告大小
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true
}
}
}
打包分析插件
打包后,会在根目录下生成一个 stats.html文件
npm install rollup-plugin-visualizer -D
// viet.config.js
import { defineConfig } from 'vite'
import { visualizer } from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [visualizer()]
})
监听文件修改
通过监听文件修改,自动重启 vite 服务
npm i vite-plugin-restart -D
//viet.config.js
import ViteRestart from 'vite-plugin-restart'
export default {
plugins: [
ViteRestart({
restart: [
'vite.config.js',
]
})
],
};
跨域
server: {
host: "0.0.0.0",
hmr: true,
strictPort: false,
//自定义代理规则
proxy: {
// 选项写法
"/api": {
target: "",
changeOrigin: true,
rewrite: (path) => path.replace(/^/api/, ""),
},
},
},
js最小拆分包
// 配置vite.config 的 output 属性;让打开那个页面,加载那个页面的js ,让之间的关联足够小
output: {
// 最小化拆分包
manualChunks(id) {
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0].toString();
}
}
},
// 不建议配置,未来此配置将废弃