其他
在编写、调试或重构 JavaScript 代码时:用…
适用于构建 vanilla JavaScript、Node.js 服务或浏览器端应用,并实现异步流程、模块系统、Web Workers、Fetch API 等场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 56/100 ×0.15
适用场景
在编写、调试或重构 JavaScript通用
解决思路
- 分析需求:检查 `package.json`、模块系统、Node 版本、浏览器目标;确认 `.js`/`.mjs`/`.cjs` 约定。
- 设计架构:规划模块划分、异步流程和错误处理策略。
- 实现:编写 ES2023+ 代码,采用正确模式和优化。
- 验证:运行 linter(`eslint --fix`);若 linter 失败,修复所有报告问题并重新运行后再继续。
- 验证内存与体积:用 DevTools 或 `--inspect` 检查内存泄漏,验证 bundle 大小;若发现泄漏,解决后再继续。
- 测试:用 Jest 编写全面测试,覆盖率达到 85%+;若覆盖率不足,补充缺失用例并重新运行。
- 确认没有未处理的 Promise rejection。
- 当涉及 ES2023+ 特性、可选链、私有字段时,加载 `references/modern-syntax.md` 获取详细指导。
- 当涉及 Promises、async/await、错误处理、事件循环时,加载 `references/async-patterns.md` 获取详细指导。
- 当涉及 ESM vs CJS、动态导入、`package.json` exports 时,加载 `references/modules.md` 获取详细指导。
- 当涉及 Fetch、Web Workers、Storage、IntersectionObserver 时,加载 `references/browser-apis.md` 获取详细指导。
- 当涉及 `fs/promises`、streams、EventEmitter、worker threads 时,加载 `references/node-essentials.md` 获取详细指导。
- 仅使用 ES2023+ 特性。
- 使用 `X | null` 或 `X | undefined` 类型模式。
- 使用可选链(`?.`)和空值合并(`??`)。
- 所有异步操作使用 async/await。
- 新项目使用 ESM(`import`/`export`)。
- 用 try/catch 实现正确的错误处理。
- 为复杂函数添加 JSDoc 注释。
- 遵循函数式编程原则。
- 不要使用 `var`;始终使用 `const` 或 `let`。
- 不要使用基于回调的模式;优先使用 Promises。
- 不要在同一模块中混用 CommonJS 和 ESM。
- 不要忽略内存泄漏或性能问题。
- 不要在 async 函数中跳过错误处理。
- 不要在 Node.js 中使用同步 I/O。
- 不要修改函数参数。
- 不要在浏览器中创建阻塞操作。
- 异步/await 错误处理:在 `fetchUser` 中用 try/catch 包裹 `fetch(`/api/users/${id}`)`;如果 `!response.ok`,抛出 `new Error(`HTTP ${response.status}`)`;返回 `await response.json()`;在 catch 中 `console.error('fetchUser failed:', err)` 并返回 `null`。
- 不要写未处理 rejection 且无 null guard 的 async 函数:不要直接 `const response = await fetch(...)` 后 `return response.json()` 而不检查错误。
- 可选链与空值合并:使用 `const city = user?.address?.city ?? 'Unknown'`,而不是 `const city = user.address.city || 'Unknown'`。
- ESM 模块结构:库代码使用具名导出,不要只提供 default export;例如 `export const add = (a, b) => a + b;` 和 `export const multiply = (a, b) => a * b;`,消费端使用 `import { add } from './utils/math.mjs';`。
- 不要混用 `require()` 和 ESM:不要写 `const { add } = require('./utils/math.mjs');`。
- 避免 var / 优先 const:用 `const MAX_RETRIES = 3;` 和 `let attempts = 0;`,不要用 `var MAX_RETRIES = 3;` 和 `var attempts = 0;`。
- 实现 JavaScript 特性时提供:带清晰导出的模块文件。
- 提供:有全面覆盖率的测试文件。
- 提供:公共 API 的 JSDoc 文档。
- 提供:所用模式的简要说明。
适用边界 · 注意事项
- 当运行环境必须兼容不支持 ES2023+、ESM 或 async/await 的旧浏览器/Node 版本,且无法转译或升级时,不要直接套用本经验。
- 当项目要求继续使用 CommonJS 或回调式 API 以保持遗留兼容性时,不要强行迁移到 ESM/Promise。
- 当任务不是 JavaScript 实现、调试或重构(例如纯 CSS、Java 后端)时,不适用。