分块优化
https://cn.vitejs.dev/config/build-options.html#build-chunksizewarninglimit
https://cn.vitejs.dev/config/build-options.html#build-rollupoptions
https://rollupjs.org/configuration-options/#output-manualchunks
配置(对象形式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| export default { build: { chunkSizeWarningLimit: 1024, rollupOptions: { output: { manualChunks: { monacoeditor: ["monaco-editor"], quill: ["quill"], lodash: ["lodash"], lib: ["sortablejs", "vxe-table", "xe-utils"], vlib: ["vue", "vue-router", "vue-i18n", "element-plus"], }, }, }, }, };
|
配置(函数形式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| export default { build: { chunkSizeWarningLimit: 1024, rollupOptions: { output: { manualChunks(id) { if (id.includes("node_modules")) { return "vendor"; } }, }, }, }, };
|
打包资源分类
https://cn.vitejs.dev/config/build-options.html#build-rollupoptions
https://rollupjs.org/configuration-options/#output-entryfilenames
https://rollupjs.org/configuration-options/#output-chunkfilenames
https://rollupjs.org/configuration-options/#output-assetfilenames
1 2 3 4 5 6 7 8 9 10 11
| export default { build: { rollupOptions: { output: { entryFileNames: "static/js/[name]-[hash].js", chunkFileNames: "static/js/[name]-[hash].js", assetFileNames: "static/[ext]/[name]-[hash].[ext]", }, }, }, };
|
scss 自动导入
https://cn.vitejs.dev/config/shared-options.html#css-preprocessoroptions
1 2 3 4 5 6 7 8 9
| export default { css: { preprocessorOptions: { scss: { additionalData: `@import "@/assets/styles/variables.scss";`, }, }, }, };
|
打包去掉 console
https://esbuild.github.io/api/#drop
1 2 3 4 5 6 7 8 9 10
| import { defineConfig } from "vite";
export default defineConfig(({ mode }) => ({ esbuild: { drop: mode === "production" ? ["debugger", "console"] : [], }, }));
|
别名
1 2 3 4 5 6 7 8 9 10
| import { fileURLToPath, URL } from "node:url";
export default { resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)), }, }, };
|
setup 指定组件名称
1
| npm i -D vite-plugin-vue-setup-extend
|
1 2 3 4 5
| import vitePluginVueSetupExtend from "vite-plugin-vue-setup-extend";
export default { plugins: [vitePluginVueSetupExtend()], };
|
1
| <script setup name="MyComponent"></script>
|
gzip 压缩
https://github.com/vbenjs/vite-plugin-compression
1
| npm i -D vite-plugin-compression
|
1 2 3 4 5 6 7 8 9 10 11
| import compression from "vite-plugin-compression";
export default { plugins: [ compression({ ext: ".gz", threshold: 1024, deleteOriginFile: false, }), ], };
|
SVG 自动引入
https://www.npmjs.com/package/vite-plugin-svg-icons
1
| npm i -D vite-plugin-svg-icons
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; import path from "node:path"; import { fileURLToPath } from "node:url";
export default { plugins: [ createSvgIconsPlugin({ iconDirs: [path.resolve(fileURLToPath(new URL("./", import.meta.url)), "src/assets/icons/svg")], symbolId: "icon-[dir]-[name]", svgoOptions: true, }), ], };
|
打包排除 js 库使用 CDN 引入
https://rollupjs.org/configuration-options/#external
排除后,在 index.html 中引入 CDN 地址。
1 2 3 4 5 6 7
| export default { build: { rollupOptions: { external: ["echarts"], }, }, };
|
打包模块可视化分析
https://www.npmjs.com/package/rollup-plugin-visualizer
1
| npm i -D rollup-plugin-visualizer
|
1 2 3 4 5
| import { visualizer } from "rollup-plugin-visualizer";
export default { plugins: [visualizer()], };
|