|
|
@ -2,94 +2,99 @@ import { resolve } from 'node:path' |
|
|
|
import vue from '@vitejs/plugin-vue' |
|
|
|
import AutoImport from 'unplugin-auto-import/vite' |
|
|
|
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' |
|
|
|
import { defineConfig } from 'vite' |
|
|
|
import { defineConfig, loadEnv } from 'vite' |
|
|
|
import viteCompression from 'vite-plugin-compression' |
|
|
|
import eslintPlugin from 'vite-plugin-eslint' |
|
|
|
import packageJson from './package.json' |
|
|
|
|
|
|
|
const Timestamp = new Date().getTime() |
|
|
|
export default defineConfig({ |
|
|
|
define: { |
|
|
|
__APP_VERSION__: JSON.stringify(packageJson.version), |
|
|
|
}, |
|
|
|
base: './', |
|
|
|
envPrefix: 'FT_', |
|
|
|
esbuild: { |
|
|
|
drop: process.env.NODE_ENV === 'production' ? ['console'] : [], |
|
|
|
}, |
|
|
|
build: { |
|
|
|
sourcemap: false, |
|
|
|
outDir: `dist-v${packageJson.version}`, |
|
|
|
rollupOptions: { |
|
|
|
output: { |
|
|
|
manualChunks(id) { |
|
|
|
if (id.includes('node_modules')) { |
|
|
|
return id.toString().split('node_modules/')[1].split('/')[0].toString() |
|
|
|
} |
|
|
|
}, |
|
|
|
chunkFileNames: (chunkInfo) => { |
|
|
|
const facadeModuleId = chunkInfo.facadeModuleId |
|
|
|
? chunkInfo.facadeModuleId.split('/') |
|
|
|
: [] |
|
|
|
const fileName = facadeModuleId.slice(-2)[0] || '[name]' |
|
|
|
return `js/${fileName}/[name].[hash].${Timestamp}.js` |
|
|
|
|
|
|
|
export default defineConfig(({ mode }) => { |
|
|
|
// eslint-disable-next-line node/prefer-global/process
|
|
|
|
const env = loadEnv(mode, process.cwd(), 'FT_') |
|
|
|
return { |
|
|
|
define: { |
|
|
|
__APP_VERSION__: JSON.stringify(packageJson.version), |
|
|
|
}, |
|
|
|
base: './', |
|
|
|
envPrefix: 'FT_', |
|
|
|
esbuild: { |
|
|
|
// eslint-disable-next-line node/prefer-global/process
|
|
|
|
drop: process.env.NODE_ENV === 'production' ? ['console'] : [], |
|
|
|
}, |
|
|
|
build: { |
|
|
|
sourcemap: false, |
|
|
|
outDir: `dist-v${packageJson.version}`, |
|
|
|
rollupOptions: { |
|
|
|
output: { |
|
|
|
manualChunks(id) { |
|
|
|
if (id.includes('node_modules')) { |
|
|
|
return id.toString().split('node_modules/')[1].split('/')[0].toString() |
|
|
|
} |
|
|
|
}, |
|
|
|
chunkFileNames: (chunkInfo) => { |
|
|
|
const facadeModuleId = chunkInfo.facadeModuleId |
|
|
|
? chunkInfo.facadeModuleId.split('/') |
|
|
|
: [] |
|
|
|
const fileName = facadeModuleId.slice(-2)[0] || '[name]' |
|
|
|
return `js/${fileName}/[name].[hash].${Timestamp}.js` |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
plugins: [ |
|
|
|
vue(), |
|
|
|
AutoImport({ |
|
|
|
imports: ['vue', 'vue-router', { |
|
|
|
vue: ['withModifiers'], |
|
|
|
}, { |
|
|
|
from: 'element-plus/es', |
|
|
|
imports: ['TabPaneName'], |
|
|
|
type: true, |
|
|
|
}], |
|
|
|
dts: true, |
|
|
|
eslintrc: { |
|
|
|
enabled: true, |
|
|
|
plugins: [ |
|
|
|
vue(), |
|
|
|
AutoImport({ |
|
|
|
imports: ['vue', 'vue-router', { |
|
|
|
vue: ['withModifiers'], |
|
|
|
}, { |
|
|
|
from: 'element-plus/es', |
|
|
|
imports: ['TabPaneName'], |
|
|
|
type: true, |
|
|
|
}], |
|
|
|
dts: true, |
|
|
|
eslintrc: { |
|
|
|
enabled: true, |
|
|
|
}, |
|
|
|
resolvers: [ElementPlusResolver({ importStyle: 'sass' })], |
|
|
|
}), |
|
|
|
eslintPlugin({ |
|
|
|
cache: false, // 禁用缓存,以确保每次修改后都能及时生效
|
|
|
|
}), |
|
|
|
viteCompression({ |
|
|
|
verbose: true, |
|
|
|
disable: false, |
|
|
|
threshold: 10240, |
|
|
|
algorithm: 'gzip', |
|
|
|
ext: '.gz', |
|
|
|
}), |
|
|
|
], |
|
|
|
resolve: { |
|
|
|
alias: { |
|
|
|
'@': resolve(__dirname, './src'), |
|
|
|
'apis': resolve(__dirname, 'src/apis'), |
|
|
|
'assets': resolve(__dirname, 'src/assets'), |
|
|
|
'components': resolve(__dirname, 'src/components'), |
|
|
|
'hooks': resolve(__dirname, 'src/hooks'), |
|
|
|
'libs': resolve(__dirname, 'src/libs'), |
|
|
|
'stores': resolve(__dirname, 'src/stores'), |
|
|
|
'views': resolve(__dirname, 'src/views'), |
|
|
|
}, |
|
|
|
resolvers: [ElementPlusResolver({ importStyle: 'sass' })], |
|
|
|
}), |
|
|
|
eslintPlugin({ |
|
|
|
cache: false, // 禁用缓存,以确保每次修改后都能及时生效
|
|
|
|
}), |
|
|
|
viteCompression({ |
|
|
|
verbose: true, |
|
|
|
disable: false, |
|
|
|
threshold: 10240, |
|
|
|
algorithm: 'gzip', |
|
|
|
ext: '.gz', |
|
|
|
}), |
|
|
|
], |
|
|
|
resolve: { |
|
|
|
alias: { |
|
|
|
'@': resolve(__dirname, './src'), |
|
|
|
'apis': resolve(__dirname, 'src/apis'), |
|
|
|
'assets': resolve(__dirname, 'src/assets'), |
|
|
|
'components': resolve(__dirname, 'src/components'), |
|
|
|
'hooks': resolve(__dirname, 'src/hooks'), |
|
|
|
'libs': resolve(__dirname, 'src/libs'), |
|
|
|
'stores': resolve(__dirname, 'src/stores'), |
|
|
|
'views': resolve(__dirname, 'src/views'), |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 本地化配置
|
|
|
|
server: { |
|
|
|
// open: true,
|
|
|
|
hmr: true, |
|
|
|
port: 3000, |
|
|
|
host: '0.0.0.0', |
|
|
|
proxy: { |
|
|
|
'/api': { |
|
|
|
target: '192.168.100.168:8080', |
|
|
|
// target: 'http://192.168.1.200:8080',
|
|
|
|
// secure: false,
|
|
|
|
changeOrigin: true, // 是否跨域
|
|
|
|
rewrite: path => path.replace(/^\/api/, 'api'), |
|
|
|
// 本地化配置
|
|
|
|
server: { |
|
|
|
// open: true,
|
|
|
|
hmr: true, |
|
|
|
port: 3000, |
|
|
|
host: '0.0.0.0', |
|
|
|
proxy: { |
|
|
|
[env.FT_API_BASE]: { |
|
|
|
target: env.FT_PROXY, |
|
|
|
// secure: false,
|
|
|
|
changeOrigin: true, // 是否跨域
|
|
|
|
rewrite: path => path.replace(new RegExp(`^${env.FT_API_BASE}`), 'api'), |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
}) |