57 lines
2.2 KiB
TypeScript
57 lines
2.2 KiB
TypeScript
import { readFileSync } from "node:fs";
|
||
import { dirname, resolve } from "node:path";
|
||
import { fileURLToPath } from "node:url";
|
||
import node from "@astrojs/node";
|
||
import react from "@astrojs/react";
|
||
import tailwindcss from "@tailwindcss/vite";
|
||
import { defineConfig } from "astro/config";
|
||
|
||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||
|
||
// monorepo 根 .env(Astro 默认只读 app/web/.env,SSR 里 @app/db 要 process.env.TURSO_*)
|
||
try {
|
||
const env = readFileSync(resolve(__dirname, "../../.env"), "utf-8");
|
||
for (const line of env.split("\n")) {
|
||
const [key, ...vals] = line.split("=");
|
||
if (key && !key.startsWith("#")) {
|
||
process.env[key.trim()] ??= vals.join("=").trim();
|
||
}
|
||
}
|
||
} catch {}
|
||
|
||
// SSR + Node standalone;@app/* 别名指向各包 dist(dev/build 前需先 build 上游)
|
||
export default defineConfig({
|
||
output: "server",
|
||
adapter: node({ mode: "standalone" }),
|
||
integrations: [react()],
|
||
// 路由:动态 [locale]/… 单套视图;/ 与非法前缀在 middleware 处理
|
||
vite: {
|
||
plugins: [tailwindcss()],
|
||
optimizeDeps: {
|
||
// 预打包 react CJS,避免浏览器拿裸 CJS 导致 island 无 createRoot
|
||
include: ["react", "react-dom", "react-dom/client"],
|
||
},
|
||
resolve: {
|
||
alias: {
|
||
"@/*": resolve(__dirname, "src"),
|
||
"@app/i18n": resolve(__dirname, "../../packages/i18n/dist/index.js"),
|
||
"@app/trpc": resolve(__dirname, "../../packages/trpc/dist/index.js"),
|
||
"@app/types": resolve(__dirname, "../../packages/types/dist/index.js"),
|
||
"@app/db": resolve(__dirname, "../../packages/db/dist/index.js"),
|
||
"@app/seo-geo": resolve(__dirname, "../../packages/seo-geo/dist/index.js"),
|
||
"@app/ui": resolve(__dirname, "../../packages/ui/src/index.ts"),
|
||
},
|
||
dedupe: ["react", "react-dom"],
|
||
},
|
||
ssr: {
|
||
noExternal: ["@app/trpc", "@app/db", "@app/i18n", "@app/ui"],
|
||
// webdav 必须走 Node 原生 stream,不能被 SSR 打包掏空
|
||
external: ["webdav"],
|
||
},
|
||
},
|
||
server: {
|
||
port: 4321,
|
||
host: false,
|
||
},
|
||
});
|