chore(scripts): 使用 tsx 运行 TypeScript 脚本,解除对特定 Node 运行时的依赖 (fixes #12)

- 将所有 npm scripts 和文档里的 `node scripts/*.ts` 替换为 `tsx` 调用。
- 移除了对手动开启 --experimental-strip-types 的要求提示。
- 现在任何 Node >= 18 标准环境均可执行所有 verify 脚本及开发工具。
This commit is contained in:
troytt 2026-09-14 11:44:43 +00:00
parent 3cfa0cff9a
commit 63b3962a52
6 changed files with 1821 additions and 36 deletions

View File

@ -14,8 +14,8 @@ cd /root/diablo_web
npm install # 只装 devDependencies:vite / typescript / @types/node
# 夹具(仓库不含素材,夹具是脚本生成的)
node scripts/make-map-fixtures.ts samples/fixtures
node scripts/make-mpq-fixture.ts samples/fixtures # 把夹具打成真 MPQ
tsx scripts/make-map-fixtures.ts samples/fixtures
tsx scripts/make-mpq-fixture.ts samples/fixtures # 把夹具打成真 MPQ
npm run dev # http://127.0.0.1:5173/
```
@ -283,7 +283,7 @@ npm run verify:acts # 五个 act 城镇解析 + 合成,40/40
implode 落地后,§7A 剩下这四件(现在都有真文件可对照):
1. `node scripts/inspect-mpq.ts <file> header` 和 `hist` → 头字段与压缩掩码分布。
1. `tsx scripts/inspect-mpq.ts <file> header` 和 `hist` → 头字段与压缩掩码分布。
2. **DT1 数据块偏移基准**:`src/formats/dt1.ts` 现在按"先相对、失败再绝对"处理 `FileOffset`,需要真文件确认。
3. **经典 `string.tbl` 索引布局**:`src/formats/tbl.ts` 目前只有**构造检查**级证据
(Go 侧 `tbl_text` 实现的是后来带哈希表的变体,不能当对照)。
@ -310,7 +310,7 @@ implode 落地后,§7A 剩下这四件(现在都有真文件可对照):
cd /root/diablo_web
npx tsc --noEmit # 类型检查
npm run build # 四个入口都进产物
node scripts/verify-net.ts # 143 项
tsx scripts/verify-net.ts # 143 项
```
三者在迁移后均通过(见本次会话最后一条工具输出);开发服务器与中继已改为从新路径启动:
@ -324,10 +324,10 @@ npm run net-server # 后台任务,ws://127.0.0.1:8787
```bash
CHROME=/root/.cache/ms-playwright/chromium-1223/chrome-linux64/chrome
node scripts/browser/inspect-page.mjs "$CHROME" \
tsx scripts/browser/inspect-page.mjs "$CHROME" \
"http://127.0.0.1:5173/map.html?data=samples/fixtures" \
scripts/browser/checks/map-save-load.js
node scripts/browser/many-pages.mjs "$CHROME" \
tsx scripts/browser/many-pages.mjs "$CHROME" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peer=0" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peer=1"
```

View File

@ -70,8 +70,8 @@ tar xJf d2-packs-2026-09-14.tar.xz # 解出 samples/d2-packs/
```bash
npm install # 仅 vite / typescript / @types/node
node scripts/make-fixtures.ts samples/fixtures # 夹具:DC6 + 调色板 + 文本表
node scripts/make-map-fixtures.ts samples/fixtures # 夹具:DT1 + DS1 + 夹具 MPQ
tsx scripts/make-fixtures.ts samples/fixtures # 夹具:DC6 + 调色板 + 文本表
tsx scripts/make-map-fixtures.ts samples/fixtures # 夹具:DT1 + DS1 + 夹具 MPQ
npm run pack:data # 从 samples/d2/ 烘焙 62 个地图块 → samples/d2-packs
npm run dev # http://127.0.0.1:5173/acts.html
```

1781
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,30 +9,36 @@
"build": "tsc --noEmit && vite build",
"preview": "vite preview",
"typecheck": "tsc --noEmit",
"inspect": "node scripts/inspect-mpq.ts",
"net-server": "node scripts/net-server.ts",
"verify:net": "node scripts/verify-net.ts",
"verify:d2": "node scripts/verify-d2-data.ts",
"verify:implode": "node scripts/verify-implode.ts",
"verify:collision-orientation": "node scripts/verify-collision-orientation.ts",
"verify:renderer": "npx tsx scripts/verify-renderer-lifecycle.ts",
"verify:all": "node scripts/verify-combat.ts && node scripts/verify-items.ts && node scripts/verify-m4.ts && node scripts/verify-m5.ts && node scripts/verify-net.ts && node scripts/verify-collision-orientation.ts",
"verify:acts": "node scripts/verify-acts.ts",
"verify:generators": "npx tsx scripts/verify-generators.ts samples/d2",
"inspect": "tsx scripts/inspect-mpq.ts",
"net-server": "tsx scripts/net-server.ts",
"verify:net": "tsx scripts/verify-net.ts",
"verify:d2": "tsx scripts/verify-d2-data.ts",
"verify:implode": "tsx scripts/verify-implode.ts",
"verify:collision-orientation": "tsx scripts/verify-collision-orientation.ts",
"verify:renderer": "tsx scripts/verify-renderer-lifecycle.ts",
"verify:all": "tsx scripts/verify-combat.ts && tsx scripts/verify-items.ts && tsx scripts/verify-m4.ts && tsx scripts/verify-m5.ts && tsx scripts/verify-net.ts && tsx scripts/verify-collision-orientation.ts",
"verify:acts": "tsx scripts/verify-acts.ts",
"verify:generators": "tsx scripts/verify-generators.ts samples/d2",
"build:game": "vite build --base=/diablo2/ --outDir dist-game",
"pack:data": "node scripts/pack-act-assets.ts",
"verify:packs": "node scripts/verify-packs.ts",
"verify:deploy": "node scripts/verify-deploy.ts",
"verify:listfile": "node scripts/verify-listfile.ts",
"verify:object-lookup": "node scripts/verify-object-lookup.ts",
"port:object-lookup": "node scripts/port-object-lookup.ts",
"verify:alignment": "node scripts/verify-tile-alignment.ts",
"verify:tiles": "node scripts/verify-tiles.ts",
"publish:packs": "npx tsx scripts/publish-packs.ts"
"pack:data": "tsx scripts/pack-act-assets.ts",
"verify:packs": "tsx scripts/verify-packs.ts",
"verify:deploy": "tsx scripts/verify-deploy.ts",
"verify:listfile": "tsx scripts/verify-listfile.ts",
"verify:object-lookup": "tsx scripts/verify-object-lookup.ts",
"port:object-lookup": "tsx scripts/port-object-lookup.ts",
"verify:alignment": "tsx scripts/verify-tile-alignment.ts",
"verify:tiles": "tsx scripts/verify-tiles.ts",
"publish:packs": "tsx scripts/publish-packs.ts",
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage"
},
"devDependencies": {
"@types/node": "^22.20.2",
"@vitest/coverage-v8": "^2.1.9",
"tsx": "^4.23.13",
"typescript": "^5.6.3",
"vite": "^5.4.10"
"vite": "^5.4.10",
"vitest": "^2.1.9"
}
}

View File

@ -8,7 +8,7 @@
```bash
CHROME=/root/.cache/ms-playwright/chromium-1223/chrome-linux64/chrome
node scripts/browser/inspect-page.mjs "$CHROME" \
tsx scripts/browser/inspect-page.mjs "$CHROME" \
"http://127.0.0.1:5173/map.html?data=samples/fixtures" \
scripts/browser/checks/map-save-load.js --screenshot /tmp/map.png
```
@ -19,7 +19,7 @@ node scripts/browser/inspect-page.mjs "$CHROME" \
## many-pages.mjs —— N 页同时跑(联机用)
```bash
node scripts/browser/many-pages.mjs "$CHROME" \
tsx scripts/browser/many-pages.mjs "$CHROME" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peers=3&peer=0" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peers=3&peer=1" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peers=3&peer=2" \

View File

@ -23,9 +23,9 @@ DC6PNG="${DC6PNG:-}"
cd "$ROOT"
echo "== fixtures =="
node scripts/make-fixtures.ts "$WORK" | sed 's/^/ /'
node scripts/make-map-fixtures.ts "$WORK" | sed 's/^/ /'
node scripts/make-pl2-fixture.ts "$WORK" | sed 's/^/ /'
tsx scripts/make-fixtures.ts "$WORK" | sed 's/^/ /'
tsx scripts/make-map-fixtures.ts "$WORK" | sed 's/^/ /'
tsx scripts/make-pl2-fixture.ts "$WORK" | sed 's/^/ /'
failures=0
report() {
@ -69,7 +69,7 @@ echo
echo "== dc6 / dt1 / ds1 / pl2: independent Go decoders =="
if [ -n "$REFDUMP" ] && [ -x "$REFDUMP" ]; then
for fmt in dc6 ds1 dt1 pl2; do
node scripts/dump-format.ts "$fmt" "$WORK/fixture.$fmt" > "$WORK/ts.$fmt.json" 2>/dev/null
tsx scripts/dump-format.ts "$fmt" "$WORK/fixture.$fmt" > "$WORK/ts.$fmt.json" 2>/dev/null
"$REFDUMP" "$fmt" "$WORK/fixture.$fmt" > "$WORK/go.$fmt.json" 2>/dev/null
echo " $fmt:"
python3 - "$WORK" "$fmt" <<'PY'
@ -94,7 +94,7 @@ fi
echo
echo "== dt1: pixel placement against the encoded grid =="
node scripts/verify-dt1-pixels.ts "$WORK" | sed 's/^/ /'
tsx scripts/verify-dt1-pixels.ts "$WORK" | sed 's/^/ /'
report $?
echo