create-iking-admin
Version:
金合技术中台脚手架
121 lines (119 loc) • 3.82 kB
text/typescript
/*
* @Author : wfl
* @LastEditors : wfl
* @description :
* @updateInfo :
* @Date : 2024-02-29 14:41:18
* @LastEditTime : 2024-03-14 11:08:43
*/
import fs from 'node:fs'
import path from 'node:path'
import process from 'node:process'
import { defineConfig, loadEnv } from 'vite'
import dayjs from 'dayjs'
import { replaceIconfont } from './vite/plugins/replace-iconfont'
import logger from './vite/plugins/logger'
import pkg from './package.json'
import createVitePlugins from './vite/plugins'
// https://vitejs.dev/config/
export default async ({ mode, command }) => {
replaceIconfont()
const env = loadEnv(mode, './env')
// 全局 scss 资源
const scssResources = []
fs.readdirSync('main-app/assets/styles/resources').forEach((dirname) => {
if (fs.statSync(`main-app/assets/styles/resources/${dirname}`).isFile()) {
scssResources.push(`@use "main-app/assets/styles/resources/${dirname}" as *;`)
}
})
return defineConfig({
base: './',
envDir: './env',
// 开发服务器选项 https://cn.vitejs.dev/config/#server-options
server: {
open: false,
port: 9000,
host: true,
proxy: {
'/api': {
target: env.VITE_APP_PROXY_URL,
changeOrigin: command === 'serve' && env.VITE_OPEN_PROXY === 'true',
rewrite: path => path.replace(/^\/api/, ''),
},
'/ws': {
target: env.VITE_APP_SSOCKET_PROXY_URL,
changeOrigin: command === 'serve' && env.VITE_OPEN_PROXY === 'true',
rewrite: path => path.replace(/^\/ws/, ''),
},
'/jmreport': {
target: 'http://localhost:8080',
changeOrigin: true,
},
},
},
customLogger: logger,
// 构建选项 https://cn.vitejs.dev/config/#server-fsserve-root
build: {
outDir: mode === 'production' ? 'dist' : `dist-${mode}`,
sourcemap: env.VITE_BUILD_SOURCEMAP === 'true',
// 启用/禁用 gzip 压缩大小报告;压缩大型输出文件可能会很慢,禁用该功能会提高项目的构建性能
reportCompressedSize: false,
chunkSizeWarningLimit: 1000,
rollupOptions: {
output: {
chunkFileNames: 'ik-[name]-[hash].js',
// intro: '/* eslint-disable no-eval */',
manualChunks: {
'monaco-editor': ['monaco-editor'],
'tinymce': ['tinymce'],
'element-plus': ['element-plus'],
'iking-form': ['iking-form'],
'mo-form': ['mo-form'],
},
},
},
},
define: {
__SYSTEM_INFO__: JSON.stringify({
pkg: {
version: pkg.version,
dependencies: pkg.dependencies,
devDependencies: pkg.devDependencies,
},
lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
}),
},
plugins: createVitePlugins(env, command === 'build'),
resolve: {
alias: {
// MainApp
'@main': path.resolve(__dirname, 'main-app'),
// MicroApp
'@micro': path.resolve(__dirname, 'micro-app'),
'#': path.resolve(__dirname, 'types'),
// type interface
'@t': path.resolve(__dirname, 'types'),
// global
// assets
'@as': path.resolve(__dirname, 'main-app/assets'),
// enum
'@e': path.resolve(__dirname, 'main-app/enums'),
// api
'@api': path.resolve(__dirname, 'main-app/api'),
// api/modules
'@apim': path.resolve(__dirname, 'main-app/api/modules'),
// theme
'@theme': path.resolve(__dirname, 'themes'),
// vite
'@sys': path.resolve(__dirname, 'vite'),
},
},
css: {
preprocessorOptions: {
scss: {
additionalData: scssResources.join(''),
},
},
},
})
}