You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
besure_web/vite.config.ts

131 lines
5.1 KiB
TypeScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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"
// 当前执行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)
}
// 打包时需要移除的语句drop_console / drop_debugger
const esbuildDrop: ('console' | 'debugger')[] = []
if (env.VITE_DROP_CONSOLE === 'true') esbuildDrop.push('console')
if (env.VITE_DROP_DEBUGGER === 'true') esbuildDrop.push('debugger')
return {
base: env.VITE_BASE_PATH,
root: root,
// 服务端渲染
server: {
port: env.VITE_PORT, // 端口号
host: "0.0.0.0",
open: env.VITE_OPEN === 'true',
// 本地跨域代理. 目前注释的原因暂时没有用途server 端已经支持跨域
proxy: {
['/admin-api']: {
target: env.VITE_BASE_URL,
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/admin-api`), ''),
},
},
},
// 项目使用的vite插件。 单独提取到build/vite/plugin中管理
plugins: createVitePlugins(isBuild),
css: {
preprocessorOptions: {
scss: {
additionalData: '@use "@/styles/variables.scss" as *;',
javascriptEnabled: true,
silenceDeprecations: ["legacy-js-api"], // 参考自 https://stackoverflow.com/questions/78997907/the-legacy-js-api-is-deprecated-and-will-be-removed-in-dart-sass-2-0-0
}
}
},
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')}/`
}
]
},
// 使用 esbuild 压缩,速度远快于 terserdrop 用于移除 console / debugger
esbuild: {
drop: esbuildDrop
},
build: {
minify: 'esbuild',
outDir: env.VITE_OUT_DIR || 'dist',
sourcemap: env.VITE_SOURCEMAP === 'true' ? 'inline' : false,
// brotliSize: false,
// 提高 chunk 体积告警阈值,避免大量无意义警告
chunkSizeWarningLimit: 2000,
rollupOptions: {
output: {
// 将体积较大的第三方依赖拆分为独立 chunk避免全部打进入口主 chunk 导致首屏阻塞
manualChunks(id: string) {
if (!id.includes('node_modules')) {
return
}
// 打印插件(体积最大,内含 jQuery 等),单独拆分
if (id.includes('vue-plugin-hiprint')) {
return 'hiprint'
}
// 表单设计器 / 表单渲染
if (id.includes('@form-create')) {
return 'form-create'
}
// 富文本编辑器
if (id.includes('@wangeditor')) {
return 'wangeditor'
}
// 图表库(含词云、底层 zrender
if (id.includes('echarts') || id.includes('zrender')) {
return 'echarts'
}
// 图片裁剪
if (id.includes('cropperjs')) {
return 'cropperjs'
}
// Element Plus 组件库
if (id.includes('element-plus') || id.includes('@element-plus')) {
return 'element-plus'
}
// Vue 全家桶
if (
id.includes('/vue/') ||
id.includes('/vue-router/') ||
id.includes('/@vue/') ||
id.includes('/pinia/') ||
id.includes('/vue-i18n/') ||
id.includes('/@intlify/')
) {
return 'vue'
}
}
},
},
},
optimizeDeps: {include, exclude}
}
}