SuperAPI AI 工具集

javascript-strict

编程与开发

查看项目

更新于 10-15 10:15

技能介绍

JavaScript Strict Standard 是一套从生产环境 Node.js 服务(非 TypeScript)中提取的 JavaScript 严格规范。它作为 0xmassi/claude-skills 的一个技能提供,主要用途是在编写、审查或重构纯 JavaScript(Node.js)代码时提供统一的规则依据。全文由编号规则 JS-01 至 JS-25 构成,另附一份漏洞检查清单,许多规则以“BAD / GOOD”代码对照的形式说明推荐做法。

一、变量声明(CRITICAL) JS-01:默认使用 const,必要时使用 let,绝不使用 var(代码中任何位置都不得出现 var)。 JS-02:在声明处进行解构赋值,例如 const { name, port, mode } = config,并可用默认值 const { mode = 'both', delay = 1000 } = options。

二、错误处理(CRITICAL) JS-03:绝不捕获后静默吞掉错误;catch 中应提供上下文并决定后续动作(重试、跳过或抛出),示例中记录了错误消息并调用错误通知。 JS-04:错误日志需带上下文前缀,格式为 [Module] ${identifier} Action: message,例如 console.error([Monitor] ${this.monitorId} Error:, err.message)。 JS-05:避免无上限的递归重试;应改为有界重试,示例中使用 for 循环配合退避 sleep(1000 * Math.min(i + 1, 5)),最终抛出错误。

三、异步模式(CRITICAL) JS-06:优先使用 async/await 而非原始 Promise 链。 JS-07:用 Promise.race 实现超时(withTimeout),并始终通过 .finally() 清理定时器,避免悬挂计时器。 JS-08:只使用异步文件 I/O;避免 writeFileSync 阻塞事件循环,示例还建议先比较哈希,内容未变化时跳过写入。

四、模块模式(HIGH) JS-09:使用带清晰导出的 CommonJS,可导出单个类、具名函数对象,或转出工具函数。 JS-10:避免循环依赖;若 A 依赖 B 且 B 依赖 A,应把共享逻辑抽到 C。

五、类模式(HIGH) JS-11:有状态对象使用类,无状态工具使用普通函数;示例中类用于带状态的 Monitor 服务,sleep、formatProxy 等以函数实现,并使用 Set 而非 Array 存储已通知列表。

六、文档(HIGH) JS-12:为所有公开方法编写 JSDoc;对非 TypeScript 代码库而言,这能提供 IDE 自动补全与文档支持,示例包含参数、返回值与抛出说明。

七、性能规则(MEDIUM) JS-13:成员判断用 Set、查找用 Map,把 O(n) 的 includes 改为 O(1) 的 has。 JS-14:热点路径使用单遍算法,避免多次 filter/sort 产生多个数组。 JS-15:缓存昂贵计算,例如将代理源解析一次放入类中复用。 JS-16:为频繁查找建立索引 Map,把 find 改为 O(1) 的 Map 查询。

八、安全规则 JS-17:绝不使用 eval() 或 Function(),改用 JSON.parse 等安全替代。 JS-18:绝不把用户数据写入 innerHTML,应使用 textContent。 JS-19:密钥通过环境变量提供,而非写在源码中,示例使用 dotenv 并在缺失时报错。 JS-20:日志中遮蔽密钥,例如仅显示 token 前 8 位。 JS-21:谨慎对待 NODE_TLS_REJECT_UNAUTHORIZED,避免全局关闭 SSL 校验;更优做法是使用带自定义 CA 的单请求 agent,且仅用于代理连接,绝不用于生产 API。 JS-22:使用 AbortController 实现可取消的 fetch 与超时,示例结合 AbortSignal 与定时器,并在 finally 中清理;该模式在现代 Node 中替代 Promise.race 超时写法。 JS-23:令牌使用 crypto.randomBytes 而非 Math.random;会话 ID、密码重置令牌、nonce 与 salt 同样适用。

九、运行时目标 当前 Active LTS 为 Node.js 24 LTS “Krypton”,支持至 2028 年 4 月,最新补丁线为 24.15.x,新项目以 Node 24 为目标。发布节奏有调整(2026 年 10 月周期宣布):每年 4 月发布一个大版本,每次发布在 10 月晋级后成为 LTS,升级规划围绕 4 月与 10 月窗口。原生 TypeScript 剥离自 Node 23.6 起默认不再需要标志,24.x 全程可用;枚举与命名空间仍需 --experimental-transform-types(而 TS 的 erasableSyntaxOnly 本就禁止这类语法)。

JS-24a:Node 已内置等价能力时优先使用标准库,例如以 node --env-file=.env 或 process.loadEnvFile() 替代 dotenv,以全局 fetch 替代 node-fetch/axios(简单场景),以全局 WebSocket 替代 ws(服务端),以 node:test + node --test 替代 mocha/jest(无 React 的库),以 fs.glob 替代 glob,以 node:sqlite 替代 better-sqlite3(简单场景)。好处是更小的 node_modules、更少的供应链面与更少的兼容性问题。

JS-24b:使用 --permission 实现沙箱化进程,示例通过 --allow-fs-read、--allow-fs-write、--allow-net 限制文件系统路径与网络目标,适用于插件运行器、不可信代码或加固生产入口;该能力在 Node 24 仍标记为实验性,应视为纵深防御。

JS-25:大 I/O 使用流式处理而非缓冲,示例使用 node:stream/promises 的 pipeline 配合 createReadStream/parseCsv/transform/createWriteStream,以处理背压与错误;超过几 MB 或来自网络的数据都应流式处理。

十、漏洞检查清单 清单包含:不使用 var(仅 const/let);不使用 eval() 或 new Function();不把用户可控数据写入 innerHTML;事件循环中不使用 writeFileSync(改用异步);不进行无界递归重试;成员检查不使用无界数组(用 Set);所有错误都被捕获并带上下文记录日志;密钥放在 .env 而非源码;日志中遮蔽令牌与凭据;所有公开方法带 JSDoc;NODE_TLS_REJECT_UNAUTHORIZED 仅用于代理,绝不用于生产。

适用场景:编写、审查或重构纯 JavaScript(非 TypeScript)Node.js 代码时作为规则依据。限制:该规范面向非 TypeScript 的 Node.js 代码,文中部分能力(如 --permission)标注为实验性。关于安装命令、许可与收费等信息,资料中暂未提供。