|
@@ -12,6 +12,7 @@ import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite"
|
|
|
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
|
|
import { createStyleImportPlugin, ElementPlusResolve } from 'vite-plugin-style-import'
|
|
|
import UnoCSS from 'unocss/vite'
|
|
|
+import { visualizer } from 'rollup-plugin-visualizer'
|
|
|
|
|
|
// https://vitejs.dev/config/
|
|
|
const root = process.cwd()
|
|
@@ -39,19 +40,23 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
|
|
|
}),
|
|
|
VueJsx(),
|
|
|
progress(),
|
|
|
- createStyleImportPlugin({
|
|
|
- resolves: [ElementPlusResolve()],
|
|
|
- libs: [{
|
|
|
- libraryName: 'element-plus',
|
|
|
- esModule: true,
|
|
|
- resolveStyle: (name) => {
|
|
|
- if (name === 'click-outside') {
|
|
|
- return ''
|
|
|
- }
|
|
|
- return `element-plus/es/components/${name.replace(/^el-/, '')}/style/css`
|
|
|
- }
|
|
|
- }]
|
|
|
- }),
|
|
|
+ env.VITE_USE_ALL_ELEMENT_PLUS_STYLE === 'false'
|
|
|
+ ? createStyleImportPlugin({
|
|
|
+ resolves: [ElementPlusResolve()],
|
|
|
+ libs: [
|
|
|
+ {
|
|
|
+ libraryName: 'element-plus',
|
|
|
+ esModule: true,
|
|
|
+ resolveStyle: (name) => {
|
|
|
+ if (name === 'click-outside') {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ return `element-plus/es/components/${name.replace(/^el-/, '')}/style/css`
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ })
|
|
|
+ : undefined,
|
|
|
EslintPlugin({
|
|
|
cache: false,
|
|
|
include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
|
|
@@ -67,17 +72,19 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
|
|
|
svgoOptions: true
|
|
|
}),
|
|
|
PurgeIcons(),
|
|
|
- viteMockServe({
|
|
|
- ignore: /^\_/,
|
|
|
- mockPath: 'mock',
|
|
|
- localEnabled: !isBuild,
|
|
|
- prodEnabled: isBuild,
|
|
|
- injectCode: `
|
|
|
+ env.VITE_USE_MOCK === 'true'
|
|
|
+ ? viteMockServe({
|
|
|
+ ignore: /^\_/,
|
|
|
+ mockPath: 'mock',
|
|
|
+ localEnabled: !isBuild,
|
|
|
+ prodEnabled: isBuild,
|
|
|
+ injectCode: `
|
|
|
import { setupProdMockServer } from '../mock/_createProductionServer'
|
|
|
|
|
|
setupProdMockServer()
|
|
|
`
|
|
|
- }),
|
|
|
+ })
|
|
|
+ : undefined,
|
|
|
ViteEjsPlugin({
|
|
|
title: env.VITE_APP_TITLE
|
|
|
}),
|
|
@@ -106,17 +113,27 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
|
|
|
}
|
|
|
]
|
|
|
},
|
|
|
+ esbuild: {
|
|
|
+ pure: env.VITE_DROP_CONSOLE === 'true' ? ['console.log'] : undefined,
|
|
|
+ drop: env.VITE_DROP_DEBUGGER === 'true' ? ['debugger'] : undefined
|
|
|
+ },
|
|
|
build: {
|
|
|
- minify: 'terser',
|
|
|
+ target: 'es2015',
|
|
|
outDir: env.VITE_OUT_DIR || 'dist',
|
|
|
- sourcemap: env.VITE_SOURCEMAP === 'true' ? 'inline' : false,
|
|
|
+ sourcemap: env.VITE_SOURCEMAP === 'true',
|
|
|
// brotliSize: false,
|
|
|
- terserOptions: {
|
|
|
- compress: {
|
|
|
- drop_debugger: env.VITE_DROP_DEBUGGER === 'true',
|
|
|
- drop_console: env.VITE_DROP_CONSOLE === 'true'
|
|
|
+ rollupOptions: {
|
|
|
+ plugins: env.VITE_USE_BUNDLE_ANALYZER === 'true' ? [visualizer()] : undefined,
|
|
|
+ // 拆包
|
|
|
+ output: {
|
|
|
+ manualChunks: {
|
|
|
+ 'vue-chunks': ['vue', 'vue-router', 'pinia', 'vue-i18n'],
|
|
|
+ 'element-plus': ['element-plus'],
|
|
|
+ 'wang-editor': ['@wangeditor/editor', '@wangeditor/editor-for-vue']
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
+ },
|
|
|
+ cssCodeSplit: !(env.VITE_USE_CSS_SPLIT === 'false')
|
|
|
},
|
|
|
server: {
|
|
|
port: 4000,
|