其他
Node.js 22+ TypeScript…
在 Node.js 项目(尤其 Node 22.6+ TypeScript 免构建)中应用类型剥离、异步/错误处理、流与缓存、测试诊断、性能剖析和优雅关闭等最佳实践。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 56/100 ×0.15
适用场景
Node.js 22+ TypeScri通用
解决思路
- 处理 Node.js 代码时,按领域最佳实践构建健壮、高性能、可维护的应用;需要细节时查阅对应 rules 文件。
- 使用 type stripping(Node.js 22.6+)直接运行 TypeScript,避免使用 ts-node 或 tsx 等构建工具;类型剥离在运行时移除类型注解,不做转译。
- 类型剥离兼容要求:仅类型导入使用 `import type`。
- 类型剥离兼容要求:用 const 对象替代 enum。
- 类型剥离兼容要求:避免使用 namespaces 和 parameter properties。
- 类型剥离兼容要求:导入时使用 `.ts` 扩展名。
- 可直接运行 `.ts` 文件,例如创建 `greet.ts` 后执行 `node greet.ts`;完整配置和示例见 `rules/typescript.md`。
- 优雅关闭流程:注册 SIGTERM/SIGINT 信号处理器。
- 优雅关闭流程:停止接受新工作。
- 优雅关闭流程:排空正在处理的请求。
- 优雅关闭流程:关闭外部连接(数据库、缓存)。
- 优雅关闭流程:以适当退出码退出。
- 优雅关闭细节见 `rules/graceful-shutdown.md`。
- 错误处理流程:定义共享错误基类。
- 错误处理流程:分类错误(operational vs programmer)。
- 错误处理流程:添加异步边界处理器(如 `process.on('unhandledRejection')`)。
- 错误处理流程:通过调用栈传播带类型的错误。
- 错误处理流程:在响应或崩溃前带上下文记录日志。
- 错误处理细节见 `rules/error-handling.md`。
- 诊断不稳定测试:用 `--test-only` 隔离测试。
- 诊断不稳定测试:检查共享状态或定时器依赖。
- 诊断不稳定测试:检查异步 teardown 顺序。
- 诊断不稳定测试:临时加入 retry 逻辑作为诊断步骤。
- 诊断不稳定测试:修复根因。
- 不稳定测试细节见 `rules/flaky-tests.md`。
- 诊断卡住的进程/测试(`node --test` 挂起、process did not exit、CI 超时、open handles):隔离文件/测试。
- 诊断卡住的进程/测试:用显式 timeout/reporter 运行。
- 诊断卡住的进程/测试:通过 `why-is-node-running`(`SIGUSR1`)检查 handles。
- 诊断卡住的进程/测试:在资源创建作用域内补上确定性的 teardown。
- 诊断卡住的进程/测试:先单独重跑,再跑全量测试套件,直到稳定。
- 卡住进程/测试细节见 `rules/stuck-processes-and-tests.md`。
- 性能剖析慢路径:在真实负载下复现。
- 性能剖析慢路径:用 `--cpu-prof` 捕获 CPU profile。
- 性能剖析慢路径:定位热点函数。
- 性能剖析慢路径:检查 stream backpressure 或不必要的序列化。
- 性能剖析慢路径:用 benchmark 验证改进。
- 性能剖析细节见 `rules/profiling.md` 和 `rules/performance.md`。
- 当任务涉及 CSV、ETL、ingestion pipelines、大文件处理、backpressure、重复查询或去重并发异步调用时,显式应用 streams + caching 检查清单。
- 检查清单:使用 `node:stream/promises` 的 `await pipeline(...)`,在指导/代码中优先于链式 `.pipe()`。
- 检查清单:当数据在流中转换时,至少包含一个显式 `async function*` transform。
- 检查清单:出现重复工作时选择缓存策略:单进程内有界内存复用用 `lru-cache`;异步请求去重/stale-while-revalidate 用 `async-cache-dedupe`。
- 检查清单:展示 backpressure 在哪里被处理(通过 `pipeline()` 隐式处理,或通过 `drain` 显式处理)。
- CSV/ETL 集成示例模式:使用 `createReadStream(input)`。
- CSV/ETL 集成示例模式:使用 `async function*` parser/transform。
- CSV/ETL 集成示例模式:可选使用缓存 enrichment lookup(`async-cache-dedupe` 或 `lru-cache`)。
- CSV/ETL 集成示例模式:用 `await pipeline(...)` 写入目标 destination。
- 在解释中直接链接相关规则以便检索细节:`rules/streams.md`、`rules/caching.md`。
- 需要细节时阅读各规则文件:`rules/error-handling.md`、`rules/async-patterns.md`、`rules/streams.md`、`rules/modules.md`、`rules/testing.md`、`rules/flaky-tests.md`、`rules/stuck-processes-and-tests.md`、`rules/node-modules-exploration.md`、`rules/performance.md`、`rules/caching.md`、`rules/profiling.md`、`rules/logging.md`、`rules/environment.md`、`rules/graceful-shutdown.md`、`rules/typescript.md`。
适用边界 · 注意事项
- 当 Node.js 版本低于 22.6,或项目仍需构建/转译步骤时,不应强行使用原生 type stripping。
- 当代码大量依赖 enum、namespace、parameter properties 且无法改为兼容写法时,不适合直接使用 type stripping。
- 当问题与 Node.js/TypeScript 无关,或不是 Node.js 项目时,不适用。