UNPKG

@voya-kit/vite-config

Version:

Voya vite config

129 lines (115 loc) 3.48 kB
import { resolve } from 'node:path'; import dayjs from 'dayjs'; import { readPackageJSON } from 'pkg-types'; import { defineConfig, loadEnv, mergeConfig, type UserConfig } from 'vite'; import { createPlugins } from '../plugins'; import { commonConfig } from './common'; interface DefineOptions { overrides?: UserConfig; options?: { // }; } function defineApplicationConfig(defineOptions: DefineOptions = {}) { const { overrides = {} } = defineOptions; return defineConfig(async ({ command, mode }) => { const root = process.cwd(); const isBuild = command === 'build'; const { VITE_USE_MOCK, VITE_BUILD_COMPRESS, VITE_ENABLE_ANALYZE } = loadEnv(mode, root); // 当前打包日期,在全局变量以及version中统一使用 const lastBuildTime = dayjs().format('YYYY-MM-DD HH:mm:ss'); const defineData = await createDefineData(root, lastBuildTime); const plugins = await createPlugins( { isBuild, root, enableAnalyze: VITE_ENABLE_ANALYZE === 'true', enableMock: VITE_USE_MOCK === 'true', compress: VITE_BUILD_COMPRESS || '', }, lastBuildTime, ); const pathResolve = (pathname: string) => resolve(root, '.', pathname); const applicationConfig: UserConfig = { 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') + '/', }, // @/xxxx => src/xxxx { find: /@\//, replacement: pathResolve('src') + '/', }, // #/xxxx => types/xxxx { find: /#\//, replacement: pathResolve('types') + '/', }, ], }, define: defineData, build: { target: 'es2015', cssTarget: 'chrome80', rollupOptions: { output: { // 入口文件名 entryFileNames: 'assets/[name].js', manualChunks: { vue: ['vue', 'pinia', 'vue-router'], antd: ['ant-design-vue', '@ant-design/icons-vue'], }, }, }, }, css: { preprocessorOptions: { less: { javascriptEnabled: true, // additionalData: `@import (reference) "${path.resolve('src/design/config.less')}";`, }, }, }, plugins, }; const mergedConfig = mergeConfig(commonConfig(mode), applicationConfig); return mergeConfig(mergedConfig, overrides); }); } export interface AppInfo { pkg: { dependencies?: Record<string, string>; devDependencies?: Record<string, string>; name?: string; version?: string; }; lastBuildTime: string; } async function createDefineData(root: string, lastBuildTime: string) { try { const pkgJson = await readPackageJSON(root); const { dependencies, devDependencies, name, version } = pkgJson; const __APP_INFO__: AppInfo = { pkg: { dependencies, devDependencies, name, version }, lastBuildTime: lastBuildTime, }; return { __APP_INFO__: JSON.stringify(__APP_INFO__), }; } catch (error) { return {}; } } export { defineApplicationConfig };