服务器与构建栈
server.js
server.js 是 dev 与 prod 共用的入口。pnpm dev 与 pnpm start 都跑这个文件,不是 next dev / next start。
它的实际职责(精简):
- 加载
.env.local - 准备 Next.js(
next({ dev })) - 创建 HTTP server
- 对每个请求:
- 用
toParsedUrl(req)解析,把 URL 第一段(如果是zh-CN/zh-TW/en)写到query.locale(向后兼容老 hook) - 调
app.getRequestHandler()走 Next
- 用
- 监听 SIGTERM / SIGINT / SIGHUP,graceful shutdown(3s 强制退出兜底)
- 监听
process.env.PORT(默认 3000)
注意:server.js 不做 locale 选择——那是 proxy.ts 的事。server.js 只把 URL 第一段当 query.locale 透传,方便老代码用 useRouter().query.locale。
可选旁路:预留了 if (parsedUrl.pathname.startsWith('/analytics/')) 形式的自托管分析服务代理注释,按需开启。
next.config.js
关键字段:
NEXT_BUILD_DIR 允许部署包装器指定自定义输出目录,平时不要设。
dev 期需要通过 dev.arsvine.com(自定义 hosts)访问,否则 COS 桶 Referer 不放行导致图裂。
remotePatterns 不在这里写,集中在 config/image-hosts.js。
webpack 在 Windows 生产构建时关 cache(config.cache = false)——避免 webpack 5 + Windows 的 cache 序列化问题。
i18n 插件
i18n/request.ts 是 next-intl 4 的请求配置入口,按 locale 加载 locales/<locale>.json。
入口三件套
Vercel 项目侧:
子构建器开关
pnpm env:sync 跑 scripts/sync-env-files.mjs,把 .env.local 同步到 .env.example(脱敏)。文档站 / 主站共用同一份 SECTIONS 列表,新增 env var 时改这里。
pnpm assets:prepare / build / publish 三个命令是资源发布流水线(详见 asset-pipeline)。