
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 技术栈中应用稳健模式。
提供 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-running(SIGUSR1)检查句柄 → 在资源创建作用域中修补确定性清理 → 重新运行隔离和完整套件直至稳定。参见 rules/stuck-processes-and-tests.md。
分析慢路径:在真实负载下复现 → 使用 --cpu-prof 捕获 CPU 分析 → 识别热点函数 → 检查流背压或不必要的序列化 → 通过基准测试验证改进。参见 rules/profiling.md 和 rules/performance.md。
高优先级激活检查清单(流 + 缓存)
当任务提到 CSV、ETL、摄取管道、大文件处理、背压、重复查找或去重并发异步调用时,显式应用此检查清单:
- 使用
await pipeline(...)来自node:stream/promises(在指导/代码中优先于链式.pipe())。 - 当数据在流中转换时,至少包含一个显式的
async function*转换。 - 当出现重复工作时选择缓存策略:
lru-cache用于单进程中的有界内存复用。async-cache-dedupe用于异步请求去重/stale-while-revalidate 行为。
- 展示背压处理的位置(通过
pipeline()隐式处理或通过drain显式处理)。
集成示例模式(CSV/ETL)
对于 CSV/ETL 风格的提示,优先采用如下答案结构:
createReadStream(input)async function*解析器/转换器- 可选缓存富化查找(
async-cache-dedupe或lru-cache) await pipeline(...)到可写目标
在解释中直接链接相关规则,以便模型检索详细信息:
如何使用
阅读各个规则文件以获取详细解释和代码示例:
- rules/error-handling.md - Node.js 中的错误处理模式
- rules/async-patterns.md - Async/await 和 Promise 模式
- rules/streams.md - 使用 Node.js 流
- rules/modules.md - ES 模块和 CommonJS 模式
- rules/testing.md - Node.js 应用程序的测试策略
- rules/flaky-tests.md - 使用 node:test 识别和诊断不稳定测试
- rules/stuck-processes-and-tests.md - 诊断不退出进程和卡住测试
- rules/node-modules-exploration.md - 导航和分析 node_modules 目录
- rules/performance.md - 性能优化技术
- rules/caching.md - 缓存模式和库
- rules/profiling.md - 性能分析和基准测试工具
- rules/logging.md - 日志记录和调试模式
- rules/environment.md - 环境配置和密钥管理
- rules/graceful-shutdown.md - 优雅关闭和信号处理
- rules/typescript.md - Node.js 中的 TypeScript 配置和类型剥离





