From e9ea31b327eec2910cf6097986a4eb9404a91174 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周三, 30 4月 2025 16:26:09 +0800
Subject: [PATCH] 22
---
HIAWms/web/vite.config.ts | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 223 insertions(+), 0 deletions(-)
diff --git a/HIAWms/web/vite.config.ts b/HIAWms/web/vite.config.ts
new file mode 100644
index 0000000..c0925aa
--- /dev/null
+++ b/HIAWms/web/vite.config.ts
@@ -0,0 +1,223 @@
+import { defineConfig, loadEnv, createLogger } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import vueJsx from '@vitejs/plugin-vue-jsx'
+import path from 'path'
+import Components from 'unplugin-vue-components/vite'
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
+import qiankun from 'vite-plugin-qiankun'
+import pkg from './package.json'
+import { optimizeLodashImports } from '@optimize-lodash/rollup-plugin'
+import VueTypeImports from 'vite-plugin-vue-type-imports'
+import { ChildProcess } from 'child_process'
+import slash from 'slash'
+const kill = require('kill-port')
+const crossSpawn = require('cross-spawn')
+
+const isWin = process.platform === 'win32'
+const appPath = slash(path.resolve(process.cwd(), 'app'))
+
+const getPort: () => Promise<string> = () => {
+ const child: ChildProcess = crossSpawn(
+ isWin
+ ? '..\\node_modules\\lmes-create-widget\\port'
+ : '../node_modules/lmes-create-widget/port',
+ [], //娣诲姞绔彛鍜岀幆澧冨彉閲忓弬鏁�
+ {
+ cwd: appPath,
+ shell: true,
+ env: {
+ ENV: 'production',
+ },
+ }
+ )
+
+ let output = ''
+ return new Promise((resolve, reject) => {
+ // 鑾峰彇瀛愯繘绋嬬殑鏍囧噯杈撳嚭
+ child.stdout?.on('data', (data) => {
+ output += data.toString()
+ })
+
+ child.stderr?.on('data', (data) => {
+ console.error('stderr:', data.toString())
+ })
+
+ child.on('close', (code) => {
+ if (code === 0) {
+ const port = output.split('\n')[0]
+ console.log('PROJECT_PORT:', port)
+ resolve(port)
+ } else {
+ reject(code)
+ }
+ })
+ })
+}
+
+const runGoServer = (projectPort: string) => {
+ const child: ChildProcess = crossSpawn(
+ isWin
+ ? `..\\node_modules\\lmes-create-widget\\www ${projectPort}`
+ : `../node_modules/lmes-create-widget/www ${projectPort}`,
+ [], //娣诲姞绔彛鍜岀幆澧冨彉閲忓弬鏁�
+ {
+ stdio: 'inherit',
+ cwd: appPath,
+ shell: true,
+ env: {
+ ENV: 'production',
+ },
+ }
+ )
+ return child
+}
+/**
+ * 鏉�姝籫oLang鏈嶅姟锛�8800绔彛
+ */
+const killGoServer = async (port: number) => {
+ try {
+ console.log('妫�娴嬪埌 Ctrl+C锛岃繘绋嬪嵆灏嗛��鍑�...')
+ await kill(port)
+ process.exit(0)
+ } catch (error) {
+ process.exit(0)
+ }
+}
+const run = (projectPort: string) => {
+ try {
+ runGoServer(projectPort)
+ let lastPressTime = Date.now()
+ process.on('SIGINT', async () => {
+ const currentTime = Date.now()
+ if (lastPressTime && currentTime - lastPressTime < 2000) {
+ killGoServer(Number(projectPort))
+ } else {
+ lastPressTime = Date.now()
+ }
+ })
+ process.on('SIGTERM', () => {
+ console.log('杩涚▼琚� kill 缁堟...')
+ killGoServer(Number(projectPort))
+ })
+ } catch (error) {
+ console.error(error)
+ }
+}
+// @ts-ignore
+export default defineConfig(async ({ mode }) => {
+ const projectPort = await getPort()
+ run(projectPort)
+ const env = loadEnv(mode, __dirname)
+ console.info('[mode]', mode)
+ console.info('[env]', env)
+
+ return {
+ // base: `//localhost:${env.VITE_PORT}/`,
+ base: '/',
+ plugins: [
+ // requireTransform({}),
+ vueJsx(),
+ vue({
+ // @ts-ignore
+ reactivityTransform: path.resolve(__dirname, 'src'),
+ }),
+ VueTypeImports(),
+
+ Components({
+ include: [/\.vue$/, /\.vue\?vue/, /\.md$/, /\.tsx/, /\.jsx/],
+ resolvers: [
+ ElementPlusResolver({
+ importStyle: 'sass',
+ }),
+ ],
+ }),
+ {
+ name: 'fixHMR',
+ handleHotUpdate({ modules, file }) {
+ if (file.match(/\.(js|ts|css)$/)) return modules
+
+ modules.map((m) => {
+ m.importers = new Set()
+ })
+ },
+ },
+ // qiankun(pkg.name, {
+ // useDevMode: true,
+ // }),
+ optimizeLodashImports(),
+ ],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src'),
+ components: path.resolve(__dirname, './src/components'),
+ sdk: path.resolve(__dirname, 'src/cms/sdk.es.js'),
+ },
+ },
+ server: {
+ host: '0.0.0.0',
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ },
+ origin: `//localhost:${env.VITE_PORT}`,
+ // open: true,
+ port: env.VITE_PORT,
+ cors: true,
+ proxy: {
+ // 浣跨敤鏈湴澶氳瑷�鏂囦欢鏃跺紑鍚�
+ '/api/v1/multiplelanguage/static': {
+ target: 'http://localhost:8001/language/Common.en-US.json',
+ changeOrigin: true,
+ rewrite: (path) =>
+ path.replace(/^\/api\/v1\/multiplelanguage\/static/, ''),
+ },
+ '/api': {
+ target: env.VITE_API_URL,
+ changeOrigin: true,
+ },
+ '/hubs': {
+ target: env.VITE_API_URL,
+ changeOrigin: true,
+ ws: true,
+ },
+ '/projectApi': {
+ target: `http://127.0.0.1:${projectPort}`,
+ changeOrigin: true,
+ ws: true,
+ },
+ },
+ },
+ build: {
+ outDir: 'wwwroot',
+ minify: 'esbuild',
+ sourcemap: true,
+ chunkSizeWarningLimit: 1500,
+ target: 'ES2022',
+ rollupOptions: {
+ output: {
+ entryFileNames: `index.js`,
+ },
+ },
+ },
+ esbuild: {
+ drop: mode !== 'development' ? ['console', 'debugger'] : [],
+ keepNames: true,
+ },
+ css: {
+ // postcss: {
+ // plugins: [
+ // PurgeCSS({
+ // // PurgeCSS options here
+ // content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
+ // }),
+ // ],
+ // },
+ preprocessorOptions: {
+ scss: {
+ additionalData: `
+ @use "@/assets/styles/element.scss" as *;
+ `,
+ },
+ },
+ },
+ }
+})
--
Gitblit v1.9.3