Quellcode durchsuchen

解决构建时文件被锁的问题

xiaoguohua vor 21 Stunden
Ursprung
Commit
360f31be3e
2 geänderte Dateien mit 24 neuen und 0 gelöschten Zeilen
  1. 1 0
      forecast-backend-vue/package.json
  2. 23 0
      forecast-backend-vue/vite.config.js

+ 1 - 0
forecast-backend-vue/package.json

@@ -17,6 +17,7 @@
   },
   "dependencies": {
     "@ant-design/icons-vue": "^7.0.1",
+    "@esbuild/win32-x64": "0.21.5",
     "@form-create/ant-design-vue": "^3.2.31",
     "@form-create/antd-designer": "^3.3.1",
     "@vueuse/core": "^10.9.0",

+ 23 - 0
forecast-backend-vue/vite.config.js

@@ -2,7 +2,30 @@
  * Vite 主配置文件
  * 配置已模块化,详见 config/vite 目录
  */
+import fs from 'node:fs';
+import os from 'node:os';
+import path from 'node:path';
 import { defineConfig } from 'vite';
 import { getViteConfig } from './config/vite/index.js';
 
+// 修复 Windows 下 esbuild 构建失败:
+// 1. 强制 esbuild 使用 node_modules 中已安装的二进制(跳过解压到临时目录)
+// 2. 把 TEMP/TMP 重定向到项目内的 .tmp 目录,避免 Windows Defender 锁定
+//    参见:https://github.com/evanw/esbuild/issues/3645
+const cwd = process.cwd();
+
+// 方案 1:设置 ESBUILD_BINARY_PATH
+const binCandidate = path.join(cwd, 'node_modules', '@esbuild', 'win32-x64', 'esbuild.exe');
+if (fs.existsSync(binCandidate)) {
+  process.env.ESBUILD_BINARY_PATH = binCandidate;
+}
+
+// 方案 2:重定向临时目录到项目内(绕开系统 TEMP 的 Defender 扫描)
+const localTmp = path.join(cwd, '.tmp', 'esbuild');
+fs.mkdirSync(localTmp, { recursive: true });
+process.env.TEMP = localTmp;
+process.env.TMP = localTmp;
+// 让 os.tmpdir() 也返回新值
+os.tmpdir = () => localTmp;
+
 export default defineConfig(getViteConfig);