docs: 给 OJ2 补一份自己的 CLAUDE.md;Dockerfile 拷上 bunfig.toml
## bunfig.toml 没拷进容器,才是那批「本地能过、容器过不了」的根因 bunfig.toml 里设了 `linker = "hoisted"`,但 Dockerfile 只拷了 package.json 和 bun.lock,于是容器里用的是默认的 isolated 布局(包都在 node_modules/.bun/ 下), 本地靠"提升"才解析得到的包在容器里一律 Could not resolve —— 而本地构建始终是好的, 只有镜像构建才炸。之前是一个一个补直接依赖补过去的(那是对的、该保留), 这里让两边布局一致,是第二道保险。 带上之后装 622 个包(isolated 是 1238),镜像重建通过,二进制在容器里 serve + healthcheck 正常。 顺手补了 main.ts 帮助文本里漏掉的 healthcheck 子命令(compose 里把 command 写错时,看到的就是这行)。 ## OJ2/CLAUDE.md OJ2 是独立仓库,之前没有自己的项目指引。写了一份,重点是几条「不知道就会踩」的: - **本机 Docker 可用**,整套依赖和上线演练都能在本机跑 —— 别沿用上一代 "本机跑不起来后端"的旧假设 - 单二进制不能依赖 node_modules,`.node` 资源导入 dev 和编译两种形态行为不同, **改完两种形态都要跑** - SQL 判题 spawn 的是二进制自己,入口必须有 argv 分发,那道递归闸不能删 - 判题状态码三处同步、raw_password 要保留、比赛只有 ACM、前端要兼容老 Chrome - 不写迁移:新旧后端跑同一套表结构,这是回滚能成立的前提 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,8 +21,12 @@ WORKDIR /build
|
||||
ARG NPM_REGISTRY=https://registry.npmmirror.com
|
||||
ENV BUN_CONFIG_REGISTRY=${NPM_REGISTRY}
|
||||
|
||||
# 先只拷 manifest,依赖没变时这一层能命中缓存
|
||||
COPY package.json bun.lock ./
|
||||
# 先只拷 manifest,依赖没变时这一层能命中缓存。
|
||||
# bunfig.toml 必须一起拷:它设了 linker = "hoisted",漏掉的话容器里会用默认的
|
||||
# isolated 布局(包都在 node_modules/.bun/ 下),于是本地靠"提升"才解析得到的包
|
||||
# 在容器里一律 Could not resolve —— 而本地构建始终是好的,只有镜像构建才炸。
|
||||
# 真正的修法是把直接 import 的包声明成直接依赖(已做),这里让两边布局一致是第二道保险。
|
||||
COPY package.json bun.lock bunfig.toml ./
|
||||
COPY apps/api/package.json apps/api/
|
||||
COPY apps/web/package.json apps/web/
|
||||
COPY packages/contract/package.json packages/contract/
|
||||
|
||||
Reference in New Issue
Block a user