| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * https://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| import type { UserConfig, ConfigEnv } from 'vite'; |
| import pkg from './package.json'; |
| import dayjs from 'dayjs'; |
| import { loadEnv } from 'vite'; |
| import { resolve } from 'path'; |
| import { generateModifyVars } from './build/generate/generateModifyVars'; |
| import { createProxy } from './build/vite/proxy'; |
| import { wrapperEnv } from './build/utils'; |
| import { createVitePlugins } from './build/vite/plugin'; |
| import { OUTPUT_DIR } from './build/constant'; |
| |
| function pathResolve(dir: string) { |
| return resolve(process.cwd(), '.', dir); |
| } |
| |
| const { dependencies, devDependencies, name, version } = pkg; |
| const __APP_INFO__ = { |
| pkg: { dependencies, devDependencies, name, version }, |
| lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), |
| }; |
| // const prefix = 'monaco-editor/esm/vs'; |
| export default ({ command, mode }: ConfigEnv): UserConfig => { |
| const root = process.cwd(); |
| |
| const env = loadEnv(mode, root); |
| |
| // The boolean type read by loadEnv is a string. This function can be converted to boolean type |
| const viteEnv = wrapperEnv(env); |
| |
| const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE } = viteEnv; |
| |
| const isBuild = command === 'build'; |
| |
| return { |
| base: VITE_PUBLIC_PATH, |
| root, |
| resolve: { |
| alias: [ |
| { |
| find: 'vue-i18n', |
| replacement: 'vue-i18n/dist/vue-i18n.cjs.js', |
| }, |
| // /@/xxxx => src/xxxx |
| { |
| find: /\/@\//, |
| replacement: pathResolve('src') + '/', |
| }, |
| // /#/xxxx => types/xxxx |
| { |
| find: /\/#\//, |
| replacement: pathResolve('types') + '/', |
| }, |
| ], |
| }, |
| server: { |
| https: false, |
| // Listening on all local IPs |
| host: true, |
| port: VITE_PORT, |
| // Load proxy configuration from .env |
| proxy: createProxy(VITE_PROXY), |
| }, |
| esbuild: { |
| pure: VITE_DROP_CONSOLE ? ['console.log', 'debugger'] : [], |
| }, |
| build: { |
| target: 'es2015', |
| cssTarget: 'chrome80', |
| outDir: OUTPUT_DIR, |
| // minify: 'terser', |
| /** |
| * When minify="minify:'terser'" unwraps the comment |
| * Uncomment when minify="minify:'terser'" |
| */ |
| // terserOptions: { |
| // compress: { |
| // keep_infinity: true, |
| // drop_console: VITE_DROP_CONSOLE, |
| // }, |
| // }, |
| // Turning off brotliSize display can slightly reduce packaging time |
| reportCompressedSize: false, |
| chunkSizeWarningLimit: 2000, |
| // monaco editor |
| rollupOptions: { |
| // 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`], |
| // }, |
| // }, |
| }, |
| }, |
| define: { |
| // setting vue-i18-next |
| // Suppress warning |
| __INTLIFY_PROD_DEVTOOLS__: false, |
| __APP_INFO__: JSON.stringify(__APP_INFO__), |
| __COLOR_PLUGIN_OUTPUT_FILE_NAME__: undefined, |
| __PROD__: true, |
| __COLOR_PLUGIN_OPTIONS__: {}, |
| }, |
| |
| css: { |
| preprocessorOptions: { |
| less: { |
| modifyVars: generateModifyVars(), |
| javascriptEnabled: true, |
| }, |
| }, |
| }, |
| |
| // The vite plugin used by the project. The quantity is large, so it is separately extracted and managed |
| plugins: createVitePlugins(viteEnv, isBuild), |
| |
| optimizeDeps: { |
| // @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly |
| include: [ |
| '@vue/runtime-core', |
| '@vue/shared', |
| '@iconify/iconify', |
| 'ant-design-vue/es/locale/zh_CN', |
| 'ant-design-vue/es/locale/en_US', |
| ], |
| }, |
| }; |
| }; |