Quellcode durchsuchen

fix(vite): build 不再覆写 public/config.js,改为直接写入 dist/config.js

问题:vite.config.ts 原逻辑在每次 vite 启动(serve 或 build)都把当前 env 写回
./public/config.js。一旦执行 `pnpm build`(load .env.production)就会把本地
开发态的 VITE_API_URL 覆盖成 /prod-api,随后再跑 pnpm dev 访问 :8890 时,
请求打到 /prod-api/... 而 dev server 代理只配了 /api → 404 → 登录态异常
→ 路由守卫无限重定向。

修复:
- dev(mode.command === 'serve'):仍写 public/config.js(SPA 通过 /config.js 读取 dev env)
- build(mode.command === 'build'):跳过 public/config.js 写入;新增 emit-runtime-config-js
  Rollup 插件在 writeBundle 阶段直接把生产 env 写到 dist/config.js,保持线上产物行为一致

chore: bump version Web 2.4.99 / Backend 1.0.66
Made-with: Cursor
skygu vor 1 Monat
Ursprung
Commit
ed984b45cc
3 geänderte Dateien mit 19 neuen und 5 gelöschten Zeilen
  1. 1 1
      Web/package.json
  2. 15 1
      Web/vite.config.ts
  3. 3 3
      server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

+ 1 - 1
Web/package.json

@@ -1,7 +1,7 @@
 {
 	"name": "admin.net",
 	"type": "module",
-	"version": "2.4.98",
+	"version": "2.4.99",
 	"packageManager": "pnpm@10.32.1",
 	"lastBuildTime": "2026.03.15",
 	"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",

+ 15 - 1
Web/vite.config.ts

@@ -27,7 +27,12 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
 	const devPort = Number(env.VITE_PORT) || 8888;
 	/** 浏览器访问用公网 IP/域名;勿写入 server.hmr.host,否则 WS 会 bind 该地址,云主机 EIP 常不在网卡上 → EADDRNOTAVAIL */
 	const devPublicHost = String(env.VITE_DEV_PUBLIC_HOST || '').trim();
-	fs.writeFileSync('./public/config.js', `window.__env__ = ${JSON.stringify(env, null, 2)} `);
+	const runtimeConfigJs = `window.__env__ = ${JSON.stringify(env, null, 2)} `;
+	// dev(serve)才写 public/config.js,避免 build 把生产 env 写回本地开发态文件(如 VITE_API_URL=/prod-api 会让 dev 端口 404)。
+	// build 产物中的 dist/config.js 由下面的 emit-runtime-config-js 插件在打包完成后直接写入 dist/,不经过 public/。
+	if (mode.command === 'serve') {
+		fs.writeFileSync('./public/config.js', runtimeConfigJs);
+	}
 	return {
 		plugins: [
 			visualizer({ open: false }),
@@ -57,6 +62,15 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
 							threshold: 5120,
 							skipIfLargerOrEqual: true,
 						}),
+						{
+							name: 'emit-runtime-config-js',
+							apply: 'build' as const,
+							writeBundle(options: { dir?: string }) {
+								const outDir = options.dir || resolve(__dirname, 'dist');
+								if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });
+								fs.writeFileSync(resolve(outDir, 'config.js'), runtimeConfigJs);
+							},
+						},
 					]
 				: []),
 			JSON.parse(env.VITE_OPEN_CDN) ? buildConfig.cdn() : null,

+ 3 - 3
server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -11,9 +11,9 @@
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <Copyright>Admin.NET</Copyright>
     <Description>Admin.NET 通用权限开发平台</Description>
-    <AssemblyVersion>1.0.65</AssemblyVersion>
-    <FileVersion>1.0.65</FileVersion>
-    <Version>1.0.65</Version>
+    <AssemblyVersion>1.0.66</AssemblyVersion>
+    <FileVersion>1.0.66</FileVersion>
+    <Version>1.0.66</Version>
   </PropertyGroup>
 
   <ItemGroup>