69 lines
2.7 KiB
TypeScript
69 lines
2.7 KiB
TypeScript
import type { NextConfig } from "next";
|
||
import fs from "fs";
|
||
import path from "path";
|
||
|
||
function loadEnvAll() {
|
||
// 约定:全局仅使用仓库根目录的 .env.all 作为配置来源(生产优先)。
|
||
// 说明:这里仅“补齐缺失项”,避免覆盖系统环境变量(方便部署/容器注入)。
|
||
const envAllPath = path.resolve(__dirname, "..", ".env.all");
|
||
if (!fs.existsSync(envAllPath)) return;
|
||
const raw = fs.readFileSync(envAllPath, { encoding: "utf8" });
|
||
for (const line of raw.split(/\r?\n/)) {
|
||
const trimmed = line.trim();
|
||
if (!trimmed || trimmed.startsWith("#")) continue;
|
||
const idx = trimmed.indexOf("=");
|
||
if (idx === -1) continue;
|
||
const key = trimmed.slice(0, idx).trim();
|
||
const value = trimmed.slice(idx + 1).trim();
|
||
if (!key) continue;
|
||
if (process.env[key] === undefined) {
|
||
process.env[key] = value;
|
||
}
|
||
}
|
||
}
|
||
|
||
loadEnvAll();
|
||
|
||
const nextConfig: NextConfig = {
|
||
// 供桌面端打包使用(Electron 内置 Next server.js + 最小依赖)。
|
||
// 说明:`pnpm run build:desktop:next` 会依赖该产物。
|
||
output: "standalone",
|
||
turbopack: {
|
||
// 避免 monorepo/多 lockfile 场景下 root 误判,减少构建与热更新的不确定性
|
||
root: __dirname,
|
||
},
|
||
async headers() {
|
||
// 说明:ONLYOFFICE 文档服务器会在其 iframe 内跨域拉取插件 manifest/js/html。
|
||
// 这里对插件资源放开 CORS,避免 pluginsData 加载失败。
|
||
return [
|
||
// 说明:远程通过 Cloudflare Tunnel 访问时,Next.js(Turbopack dev)默认对
|
||
// `/_next/static/chunks/*` 返回 `no-store`,导致 Cloudflare 无法缓存大体积
|
||
// bundle,网络稍慢时会出现页面长期停留在“正在载入编辑器...”的现象。
|
||
// 这些资源带 hash 文件名,设置 immutable 不会导致更新不一致。
|
||
{
|
||
source: "/_next/static/chunks/:path*",
|
||
headers: [{ key: "Cache-Control", value: "public, max-age=31536000, immutable" }],
|
||
},
|
||
{
|
||
source: "/_next/static/media/:path*",
|
||
headers: [{ key: "Cache-Control", value: "public, max-age=31536000, immutable" }],
|
||
},
|
||
// Luckysheet 静态资源:文件位于 public/luckysheet,路径稳定(并且我们在 URL 上追加了版本参数),可长期缓存。
|
||
{
|
||
source: "/luckysheet/:path*",
|
||
headers: [{ key: "Cache-Control", value: "public, max-age=31536000, immutable" }],
|
||
},
|
||
{
|
||
source: "/onlyoffice/plugins/:path*",
|
||
headers: [
|
||
{ key: "Access-Control-Allow-Origin", value: "*" },
|
||
{ key: "Access-Control-Allow-Methods", value: "GET,OPTIONS" },
|
||
{ key: "Access-Control-Allow-Headers", value: "*" },
|
||
],
|
||
},
|
||
];
|
||
},
|
||
};
|
||
|
||
export default nextConfig;
|