fix(loader-server): a watch restart reuses the file list from startup

未关闭 适合新手
#134 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
78/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
bun, typescript
领域
backend

调研方向

阅读 apps/server/src/server.ts,重点查看链接行中 startWatch 和 runWorker 周围的设置。检查构建文件夹的文件列表和 main.js 路径是如何计算的,然后追踪 watch 重启时如何将它们传给 worker。完成标准是每次重启都使用当前文件,并且缺少 main.js 时 watcher 不会崩溃。

由索引模型根据 Issue 内容生成。

描述

app:server bug
Which app is this bug report for?

server

Issue description

In watch mode, getFiles(dir) and mainPath are computed once, before startWatch (server.ts#L31-L38). runWorker reuses that same paths array on every restart (server.ts#L42-L55).

Files added after startup are missing from the files map passed to main(), and deleted files are still in it. A game that loads a new asset fails until nf start is restarted by hand.

Found by reading the code path (not reproduced).

Expected: each restart gives the worker the current files of the build folder.

Suggested fix: compute paths and mainPath inside runWorker, and handle a missing main.js there without crashing the watcher.

Found during a read-only audit of main @ 044c766 (2026-11-11).

Code sample
const paths = getFiles(dir).filter(...);   // computed once
const runWorker = async () => {
  child = fork(..., [mainPath as string, JSON.stringify(paths)]);
};
if (watch) startWatch(dir, runWorker);     // every restart reuses the same paths
Versions
  • @nanoforge-dev/loader-client / @nanoforge-dev/loader-server / @nanoforge-dev/loader-website 1.7.0 (main @ 044c766)
  • Bun 1.3.14
  • Linux x86_64
Issue priority

Medium (should be fixed soon)

I have tested this issue on a development release

044c766

主要语言
TypeScript
星标
1
派生
0
平均合并
17 小时 25 分钟
30 天内合并 PR
11

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

NanoForge-dev/Loader 的其他 Issue

查看 NanoForge-dev/Loader 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。