node

node

热门

提供 Node.js 与 TypeScript 开发的领域最佳实践,涵盖类型剥离、异步模式、错误处理、流、模块、测试、性能、缓存、日志等。适用于设置支持原生 TypeScript 的 Node.js 项目、配置类型剥离(--experimental-strip-types)、编写无需构建步骤的 Node 22+ TypeScript,或当用户提及“Node 原生 TypeScript”、“strip types”、“Node 22 TypeScript”、“无需编译的 .ts 文件”、“ts-node 替代方案”,或需要错误处理、优雅关闭、不稳定测试、性能分析或环境配置指导时。帮助配置用于类型剥离的 tsconfig.json、设置 package.json 脚本、处理模块解析和导入扩展,并在整个 Node.js 技术栈中应用稳健模式。

1874Star
151Fork
更新于 2026/7/16
SKILL.md
readonly只读
name
node
description

提供 Node.js 与 TypeScript 开发的领域最佳实践,涵盖类型剥离、异步模式、错误处理、流、模块、测试、性能、缓存、日志等。适用于设置支持原生 TypeScript 的 Node.js 项目、配置类型剥离(--experimental-strip-types)、编写无需构建步骤的 Node 22+ TypeScript,或当用户提及“Node 原生 TypeScript”、“strip types”、“Node 22 TypeScript”、“无需编译的 .ts 文件”、“ts-node 替代方案”,或需要错误处理、优雅关闭、不稳定测试、性能分析或环境配置指导时。帮助配置用于类型剥离的 tsconfig.json、设置 package.json 脚本、处理模块解析和导入扩展,并在整个 Node.js 技术栈中应用稳健模式。

使用时机

当您处理 Node.js 代码时,使用此技能获取构建健壮、高性能、可维护的 Node.js 应用程序的领域特定知识。

带类型剥离的 TypeScript

为 Node.js 编写 TypeScript 时,使用类型剥离(Node.js 22.6+)替代 ts-node 或 tsx 等构建工具。类型剥离直接在运行时移除类型注解,无需转译即可运行 TypeScript。

类型剥离兼容性的关键要求:

  • 使用 import type 进行仅类型导入
  • 使用 const 对象替代枚举
  • 避免命名空间和参数属性
  • 在导入中使用 .ts 扩展名

最小示例——一个有效的类型剥离 TypeScript 文件:

// greet.ts
import type { IncomingMessage } from 'node:http';

const greet = (name: string): string => `Hello, ${name}!`;
console.log(greet('world'));

直接运行:

node greet.ts

完整配置和示例请参阅 rules/typescript.md

常见工作流程

对于多步骤流程,在查阅相关规则文件前,请遵循以下高级序列:

优雅关闭:注册信号处理器(SIGTERM/SIGINT)→ 停止接受新工作 → 排空正在处理的请求 → 关闭外部连接(数据库、缓存)→ 以适当状态码退出。参见 rules/graceful-shutdown.md

错误处理:定义共享错误基类 → 分类错误(操作错误 vs 程序员错误)→ 添加异步边界处理器(process.on('unhandledRejection'))→ 通过调用栈传播类型化错误 → 在响应或崩溃前记录上下文日志。参见 rules/error-handling.md

诊断不稳定测试:使用 --test-only 隔离测试 → 检查共享状态或定时器依赖 → 检查异步清理顺序 → 添加重试逻辑作为临时诊断步骤 → 修复根本原因。参见 rules/flaky-tests.md

诊断卡住的进程/测试node --test 挂起、“进程未退出”、CI 超时、打开句柄):隔离文件/测试 → 使用显式超时/报告器运行 → 通过 why-is-node-runningSIGUSR1)检查句柄 → 在资源创建作用域中修补确定性清理 → 重新运行隔离和完整套件直至稳定。参见 rules/stuck-processes-and-tests.md

分析慢路径:在真实负载下复现 → 使用 --cpu-prof 捕获 CPU 分析 → 识别热点函数 → 检查流背压或不必要的序列化 → 通过基准测试验证改进。参见 rules/profiling.mdrules/performance.md

高优先级激活检查清单(流 + 缓存)

当任务提到 CSVETL摄取管道大文件处理背压重复查找去重并发异步调用时,显式应用此检查清单:

  1. 使用 await pipeline(...) 来自 node:stream/promises(在指导/代码中优先于链式 .pipe())。
  2. 当数据在流中转换时,至少包含一个显式的 async function* 转换。
  3. 当出现重复工作时选择缓存策略:
    • lru-cache 用于单进程中的有界内存复用。
    • async-cache-dedupe 用于异步请求去重/stale-while-revalidate 行为。
  4. 展示背压处理的位置(通过 pipeline() 隐式处理或通过 drain 显式处理)。

集成示例模式(CSV/ETL)

对于 CSV/ETL 风格的提示,优先采用如下答案结构:

  • createReadStream(input)
  • async function* 解析器/转换器
  • 可选缓存富化查找(async-cache-dedupelru-cache
  • await pipeline(...) 到可写目标

在解释中直接链接相关规则,以便模型检索详细信息:

如何使用

阅读各个规则文件以获取详细解释和代码示例: