import { resolve } from 'path'; import { ConfigEnv, loadEnv, UserConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import vueJsx from '@vitejs/plugin-vue-jsx'; import legacy from '@vitejs/plugin-legacy'; import { ElementPlusResolver, VantResolver } from 'unplugin-vue-components/resolvers'; import AutoImport from 'unplugin-auto-import/vite'; import Components from 'unplugin-vue-components/vite'; import WindiCSS from 'vite-plugin-windicss'; import checker from 'vite-plugin-checker'; import DefineOptions from 'unplugin-vue-define-options/vite'; const CWD = process.cwd(); const prefix = `monaco-editor/esm/vs`; // https://cn.vitejs.dev/config/ export default ({ mode }: ConfigEnv): UserConfig => { // 环境变量 const { VITE_BASE_URL } = loadEnv(mode, CWD); return { base: VITE_BASE_URL, // 设置打包路径 css: { modules: { localsConvention: 'camelCase', // 默认只支持驼峰,修改为同时支持横线和驼峰 }, preprocessorOptions: { scss: { charset: false, }, less: { charset: false, }, }, // TODO 构建包含@charset问题 https://github.com/vitejs/vite/issues/5833 // charset: false, postcss: { plugins: [ { postcssPlugin: 'internal:charset-removal', AtRule: { charset: (atRule) => { if (atRule.name === 'charset') { atRule.remove(); } }, }, }, ], }, }, plugins: [ vue(), vueJsx(), WindiCSS(), // https://github.com/sxzz/unplugin-vue-define-options DefineOptions(), legacy({ targets: ['defaults', 'not IE 11'], }), // https://github.com/antfu/unplugin-auto-import#readme AutoImport({ include: [ /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx /\.vue$/, /\.vue\?vue/, // .vue /\.md$/, // .md ], dts: true, imports: ['vue', 'vue-router'], }), Components({ dts: true, resolvers: [ElementPlusResolver(), VantResolver()], }), // https://github.com/fi3ework/vite-plugin-checker checker({ typescript: true, // vueTsc: true, eslint: { lintCommand: 'eslint "./src/**/*.{.vue,ts,tsx}"', // for example, lint .ts & .tsx }, }), ], resolve: { alias: [ { find: '@', replacement: resolve(__dirname, './src'), }, ], }, build: { cssCodeSplit: true, // 如果设置为false,整个项目中的所有 CSS 将被提取到一个 CSS 文件中 sourcemap: false, // 构建后是否生成 source map 文件。如果为 true,将会创建一个独立的 source map 文件 target: 'modules', // 设置最终构建的浏览器兼容目标。默认值是一个 Vite 特有的值——'modules' 还可设置为 'es2015' 'es2016'等 chunkSizeWarningLimit: 550, // 单位kb 打包后文件大小警告的限制 (文件大于此此值会出现警告) assetsInlineLimit: 4096, // 单位字节(1024等于1kb) 小于此阈值的导入或引用资源将内联为 base64 编码,以避免额外的 http 请求。设置为 0 可以完全禁用此项。 minify: 'terser', // 'terser' 相对较慢,但大多数情况下构建后的文件体积更小。'esbuild' 最小化混淆更快但构建后的文件相对更大。 terserOptions: { compress: { drop_console: true, // 生产环境去除console drop_debugger: true, // 生产环境去除debugger }, }, rollupOptions: { input: { main: resolve(__dirname, 'index.html'), preview: resolve(__dirname, 'preview/index.html'), }, output: { manualChunks: { jsonWorker: [`${prefix}/language/json/json.worker`], cssWorker: [`${prefix}/language/css/css.worker`], htmlWorker: [`${prefix}/language/html/html.worker`], tsWorker: [`${prefix}/language/typescript/ts.worker`], editorWorker: [`${prefix}/editor/editor.worker`], }, }, }, }, optimizeDeps: { include: ['@vueuse/core', 'element-plus', 'vant', 'lodash-es', 'vuedraggable'], }, server: { host: '0.0.0.0', port: 10086, // 设置服务启动端口号 open: false, // 设置服务启动时是否自动打开浏览器 cors: true, // 允许跨域 // 设置代理,根据项目实际情况配置 proxy: { '/api': { target: 'https://nest-api.buqiyuan.site/api/admin/', changeOrigin: true, secure: false, rewrite: (path) => path.replace('/api/', '/'), }, }, }, }; };