|
|
@@ -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);
|