Files

60 lines
2.0 KiB
JavaScript

import { existsSync, readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const workspaceRoot = path.resolve(__dirname, "..");
// Load the single repo-root `.env` into process.env for dev/build/start.
//
// This must live in next.config (not `node --env-file=...`): Next forwards the
// original node CLI flags to its worker processes via NODE_OPTIONS, where
// `--env-file`/`--env-file-if-exists` are rejected. process.env set here is
// inherited by the server workers instead.
//
// Existing process env always wins (e.g. Coolify or `docker --env-file`), and
// unknown keys (e.g. SERVER_TLS) are loaded too so the runtime entrypoint and
// the rest of the app can read them.
const envPath = path.join(workspaceRoot, ".env");
if (existsSync(envPath)) {
for (const raw of readFileSync(envPath, "utf8").split("\n")) {
const line = raw.trim();
if (!line || line.startsWith("#")) continue;
const eq = line.indexOf("=");
if (eq === -1) continue;
const key = line.slice(0, eq).trim();
let value = line.slice(eq + 1).trim();
if (
(value.startsWith('"') && value.endsWith('"')) ||
(value.startsWith("'") && value.endsWith("'"))
) {
value = value.slice(1, -1);
}
if (key && !(key in process.env)) {
process.env[key] = value;
}
}
}
/** @type {import('next').NextConfig} */
const nextConfig = {
reactCompiler: true,
// Keep the pure-JS Postgres driver external so Turbopack doesn't re-bundle it.
serverExternalPackages: ["pg"],
compiler: {
removeConsole: process.env.NODE_ENV === "production",
},
// Allow LAN / custom host access (e.g. http://h.lizhao.net:3000) in `next dev`.
allowedDevOrigins: ["h.lizhao.net", "tradeac-dev.h.lizhao.net"],
experimental: {
serverActions: {
allowedOrigins: ["h.lizhao.net", "tradeac-dev.h.lizhao.net", "localhost", "127.0.0.1"],
},
},
turbopack: {
root: workspaceRoot,
},
};
export default nextConfig;