From a8fb30431d58ec7a9d7d84cac0d95d4c22d05628 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 06 5月 2025 14:51:18 +0800
Subject: [PATCH] 22

---
 HIAWms/web/vite.config.ts |   62 ++++++++++++++++++++++++++-----
 1 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/HIAWms/web/vite.config.ts b/HIAWms/web/vite.config.ts
index b26343d..c0925aa 100644
--- a/HIAWms/web/vite.config.ts
+++ b/HIAWms/web/vite.config.ts
@@ -15,11 +15,51 @@
 
 const isWin = process.platform === 'win32'
 const appPath = slash(path.resolve(process.cwd(), 'app'))
-const runGoServer = () => {
+
+const getPort: () => Promise<string> = () => {
   const child: ChildProcess = crossSpawn(
     isWin
-      ? '..\\node_modules\\lmes-create-widget\\www'
-      : '../node_modules/lmes-create-widget/www',
+      ? '..\\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,
@@ -43,29 +83,30 @@
     process.exit(0)
   }
 }
-const run = () => {
+const run = (projectPort: string) => {
   try {
-    runGoServer()
+    runGoServer(projectPort)
     let lastPressTime = Date.now()
     process.on('SIGINT', async () => {
       const currentTime = Date.now()
       if (lastPressTime && currentTime - lastPressTime < 2000) {
-        killGoServer(8800)
+        killGoServer(Number(projectPort))
       } else {
         lastPressTime = Date.now()
       }
     })
     process.on('SIGTERM', () => {
       console.log('杩涚▼琚� kill 缁堟...')
-      killGoServer(8800)
+      killGoServer(Number(projectPort))
     })
   } catch (error) {
     console.error(error)
   }
 }
-run()
 // @ts-ignore
-export default defineConfig(({ mode }) => {
+export default defineConfig(async ({ mode }) => {
+  const projectPort = await getPort()
+  run(projectPort)
   const env = loadEnv(mode, __dirname)
   console.info('[mode]', mode)
   console.info('[env]', env)
@@ -77,6 +118,7 @@
       // requireTransform({}),
       vueJsx(),
       vue({
+        // @ts-ignore
         reactivityTransform: path.resolve(__dirname, 'src'),
       }),
       VueTypeImports(),
@@ -138,7 +180,7 @@
           ws: true,
         },
         '/projectApi': {
-          target: env.VITE_PROJECT_API_URL,
+          target: `http://127.0.0.1:${projectPort}`,
           changeOrigin: true,
           ws: true,
         },

--
Gitblit v1.9.3