| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- import { resolve } from 'path'
- import type { ConfigEnv, UserConfig } from 'vite'
- import { loadEnv } from 'vite'
- import { createVitePlugins } from './build/vite'
- import { exclude, include } from "./build/vite/optimize"
- import os from 'os'
- // 当前执行node命令时文件夹的地址(工作目录)
- const root = process.cwd()
- // 路径查找
- function pathResolve(dir: string) {
- return resolve(root, '.', dir)
- }
- // https://vitejs.dev/config/
- export default ({ command, mode }: ConfigEnv): UserConfig => {
- let env = {} as any
- const isBuild = command === 'build'
- if (!isBuild) {
- env = loadEnv((process.argv[3] === '--mode' ? process.argv[4] : process.argv[3]), root)
- } else {
- env = loadEnv(mode, root)
- }
- // 获取CPU核心数
- const cpuCount = os.cpus().length
- const maxWorkers = Math.min(4, Math.max(1, Math.floor(cpuCount / 2)))
- return {
- base: env.VITE_BASE_PATH,
- root: root,
-
- // 优化开发服务器
- server: {
- port: env.VITE_PORT,
- host: "0.0.0.0",
- open: env.VITE_OPEN === 'true',
- hmr: {
- overlay: false // 禁用错误遮罩层
- }
- },
- // 项目使用的vite插件
- plugins: [
- createVitePlugins()
- // 生产环境禁用可视化分析器以节省资源
- ],
- css: {
- preprocessorOptions: {
- scss: {
- additionalData: '@use "@/styles/variables.scss" as *;',
- javascriptEnabled: true,
- silenceDeprecations: ["legacy-js-api"]
- }
- }
- },
- resolve: {
- extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.scss', '.css'],
- alias: [
- {
- find: 'vue-i18n',
- replacement: 'vue-i18n/dist/vue-i18n.cjs.js'
- },
- {
- find: /@\//,
- replacement: `${pathResolve('src')}/`
- }
- ]
- },
- build: {
- minify: 'terser',
- outDir: env.VITE_OUT_DIR || 'dist',
- sourcemap: false, // 禁用sourcemap节省内存
- reportCompressedSize: false, // 禁用压缩大小报告
-
- // 优化构建目标
- target: 'es2015',
- cssTarget: 'chrome61',
-
- // 优化压缩选项
- terserOptions: {
- compress: {
- drop_debugger: true,
- drop_console: true,
- ecma: 2020,
- passes: 1, // 减少压缩轮次
- // 禁用一些耗内存的压缩选项
- pure_funcs: [],
- reduce_funcs: false,
- reduce_vars: false,
- unsafe: false,
- unsafe_comps: false,
- unsafe_math: false,
- unsafe_proto: false,
- unsafe_regexp: false
- },
- format: {
- comments: false
- },
- maxWorkers: maxWorkers // 根据CPU核心数限制工作线程
- },
- chunkSizeWarningLimit: 3000, // 提高警告阈值
-
- rollupOptions: {
- // 优化外部依赖处理
- external: [],
-
- // 优化输出配置
- output: {
- // 智能分包策略
- manualChunks: (id: string) => {
- if (id.includes('node_modules')) {
- // 大型库单独打包
- if (id.includes('@grapecity-software')) {
- return 'vendor-grapecity';
- }
- if (id.includes('echarts')) {
- return 'vendor-echarts';
- }
- if (id.includes('element-plus')) {
- return 'vendor-element-plus';
- }
- if (id.includes('vue') || id.includes('@vue')) {
- return 'vendor-vue';
- }
- if (id.includes('lodash')) {
- return 'vendor-lodash';
- }
- // 其他第三方库统一打包
- return 'vendor';
- }
- },
-
- // 优化文件命名和路径
- chunkFileNames: 'assets/js/[name]-[hash:8].js',
- entryFileNames: 'assets/js/[name]-[hash:8].js',
- assetFileNames: 'assets/[ext]/[name]-[hash:8].[ext]',
-
- // 优化缓存
- hoistTransitiveImports: false,
- sanitizeFileName: true
- },
-
- // 优化treeshaking
- treeshake: {
- moduleSideEffects: false,
- preset: 'smallest'
- }
- },
-
- // 优化依赖预构建
- commonjsOptions: {
- transformMixedEsModules: true,
- ignoreDynamicRequires: true
- },
-
- // 优化动态导入
- dynamicImportVarsOptions: {
- warnOnError: true
- }
- },
- optimizeDeps: {
- include,
- exclude,
- // 优化预构建
- esbuildOptions: {
- target: 'es2015',
- minify: false // 预构建不压缩,节省内存
- }
- },
- // 优化esbuild配置
- esbuild: {
- target: 'es2015',
- /// minify: false, // 禁用esbuild压缩,使用terser
- keepNames: false,
- drop: ['debugger', 'console']
- }
- }
- }
|