import { resolve } from 'node:path' import viteCompression from 'vite-plugin-compression' import { defineConfig, loadEnv, splitVendorChunkPlugin } from 'vite' import vue2 from '@vitejs/plugin-vue2' import { ViteEjsPlugin } from 'vite-plugin-ejs' import { viteExternalsPlugin } from 'vite-plugin-externals' import { visualizer } from 'rollup-plugin-visualizer' import eslintPlugin from '@nabla/vite-plugin-eslint' import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js' function getExternals(isDev) { if (isDev) { // serve return {} } // build return { vue: 'Vue', // axios: 'axios', } } export default defineConfig(({ mode, command }) => { const env = loadEnv(mode, process.cwd()) return { base: env.VITE_APP_BASE_PUBLIC, build: { sourcemap: true, emptyOutDir: true, lib: { entry: './src/entry.js', // 入口文件 name: 'leaveSourceVue', // 库的全局变量名 fileName: 'leave-source-vue' // 输出的文件名 }, rollupOptions: { // 确保外部化处理 Vue,避免将 Vue等 打包进库 external: ['vue', 'vuex', 'vue-router', 'element-ui', 'vant'], output: { globals: { vue: 'Vue' } } }, target: 'es2015' // 指定目标语法版本 }, plugins: [ splitVendorChunkPlugin(), vue2(), ViteEjsPlugin({ assets: { version: Date.now() } }), eslintPlugin(), // 不打包的库(外部需要通过cdn引入) viteExternalsPlugin(getExternals(command)), viteCompression({ threshold: 1024 }), visualizer(), cssInjectedByJsPlugin() ], resolve: { alias: [ { find: /^~/, replacement: '' }, { find: '@', replacement: resolve(__dirname, 'src') } ], extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] }, server: { host: '0.0.0.0', proxy: { '/jyapi': { target: 'https://jybx-webtest.jydev.jianyu360.com', changeOrigin: true, rewrite: path => path.replace(/^\/jyapi/, '') }, '/api': { target: 'https://jybx-webtest.jydev.jianyu360.com', changeOrigin: true, rewrite: path => path.replace(/^\/api/, '') } } } } })