[工程化/环境] 测试与构建脚本执行强依赖特定 Node.js 运行时:引入 tsx 解决跨平台与 CI 无法运行 TypeScript 脚本 #12

Closed
opened 2026-09-14 07:01:33 +00:00 by troytt · 1 comment
Owner

Parent Issue: #7 ([Code Review] 整体代码质量、架构缺陷与技术债务全景审查报告)

模块位置

package.json, scripts/

问题背景与现象

  • package.json 中的所有测试命令(verify:*)直接配置为 node scripts/*.ts。
  • 这强依赖了特定官方预编译 Node.js v22 二进制附带的实验性 amaro 剥离特性。
  • 在许多 Linux 发行版(如 Debian/Ubuntu apt 官方源)安装的标准 Node.js 环境或部分 Docker 容器中,直接崩溃报 ERR_UNKNOWN_FILE_EXTENSION: Unknown file extension ".ts" 或 ERR_NO_TYPESCRIPT: Node.js is not compiled with TypeScript support。

造成的影响

  1. 开发者在干净环境或不同发行版上拉取仓库后,无法直接运行 npm run verify:all;
  2. 限制了 CI/CD 流水线的基础镜像选型。

解决建议

  1. 在 devDependencies 中添加 tsx: "^4.x"(或利用现有的 esbuild / vite-node);
  2. 将 package.json 中的 node scripts/*.ts 命令统一更新为 tsx scripts/*.ts;
  3. 在 README.md 与开发文档中移除对特定 Node 二进制编译特性的限制说明。
> **Parent Issue**: #7 ([Code Review] 整体代码质量、架构缺陷与技术债务全景审查报告) ## 模块位置 `package.json`, `scripts/` ## 问题背景与现象 - `package.json` 中的所有测试命令(`verify:*`)直接配置为 `node scripts/*.ts`。 - 这强依赖了特定官方预编译 Node.js v22 二进制附带的实验性 `amaro` 剥离特性。 - 在许多 Linux 发行版(如 Debian/Ubuntu apt 官方源)安装的标准 Node.js 环境或部分 Docker 容器中,直接崩溃报 `ERR_UNKNOWN_FILE_EXTENSION: Unknown file extension ".ts"` 或 `ERR_NO_TYPESCRIPT: Node.js is not compiled with TypeScript support`。 ## 造成的影响 1. 开发者在干净环境或不同发行版上拉取仓库后,无法直接运行 `npm run verify:all`; 2. 限制了 CI/CD 流水线的基础镜像选型。 ## 解决建议 1. 在 `devDependencies` 中添加 `tsx: "^4.x"`(或利用现有的 `esbuild` / `vite-node`); 2. 将 `package.json` 中的 `node scripts/*.ts` 命令统一更新为 `tsx scripts/*.ts`; 3. 在 `README.md` 与开发文档中移除对特定 Node 二进制编译特性的限制说明。
Author
Owner

已修复 — chore(scripts): 使用 tsx 运行 TypeScript 脚本 (63b3962)

package.json 中所有 node scripts/*.ts 的调用已全部改为通过 tsx 运行,并把原先零散的 npx tsx 写法统一规范化。tsx 作为 devDependency 引入,因此不违反本项目「运行时零依赖」的硬性约束。

README / HANDOVER 中「需要特定 Node 运行时 / --experimental-strip-types」的说法已改写为:任何 Node >= 18 均可。

验证: 冷装 (rm -rf node_modules && npm ci) 后 npm run verify:all 全链路通过,不再出现 ERR_UNKNOWN_FILE_EXTENSION。

### 已修复 — `chore(scripts): 使用 tsx 运行 TypeScript 脚本` (63b3962) `package.json` 中所有 `node scripts/*.ts` 的调用已全部改为通过 `tsx` 运行,并把原先零散的 `npx tsx` 写法统一规范化。`tsx` 作为 **devDependency** 引入,因此不违反本项目「运行时零依赖」的硬性约束。 README / HANDOVER 中「需要特定 Node 运行时 / `--experimental-strip-types`」的说法已改写为:任何 Node >= 18 均可。 **验证:** 冷装 (`rm -rf node_modules && npm ci`) 后 `npm run verify:all` 全链路通过,不再出现 `ERR_UNKNOWN_FILE_EXTENSION`。
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Reference: troytt/diablo2-web#12
No description provided.