关于 node-packaging
node-packaging 面向 Node.js 包维护者,帮助确保模块格式、exports、类型声明和 tarball 能被目标消费者正确使用。它依据 Node 引擎支持范围指导格式选择,并在发布前检查包内容。
主要功能
- 01依据引擎支持选择 ESM 或双格式
- 02明确配置 exports 映射
- 03设置构建与声明输出
- 04通过白名单限定 tarball 内容
- 05运行包验证检查
适用场景
- 01为指定 Node 支持范围准备包
- 02诊断模块或类型解析错误
- 03发布前检查包内容
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ paldom/ node-skills --skill node-packaging安装后在 Claude Code 中输入/node-packaging确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/packaging-playbook.mdscripts/check_package.sh详细介绍
node-packaging
制作一个能为你声称支持的每种使用场景正确安装和解析的包——包括模块格式、导出映射、类型和 tarball 内容。 此技能修复的问题:模型宣称“现在只支持 ESM 没问题”,却不检查使用方的 Node 版本范围;编写的导出映射无法解析类型;发布的 tarball 塞满了源代码和 CI 垃圾文件。
不适用场景
- 升级版本、编写变更日志、发布、OIDC →
node-release。 - 声明文件的生成 / tsconfig →
node-typescript(此技能负责使用方如何解析已生成的内容)。 - 依赖项卫生 →
node-supply-chain。
工作流
- 依据证据决定格式,而非追逐潮流——优先 ESM,而非始终 ESM:
阅读
package.json#engines和使用方的实际情况。require(esm)只在特定 Node 版本系列中可用,且有实际限制(所需依赖图中不能有顶层 await)——支持矩阵和决策框架见references/packaging-playbook.md。如果较旧的引擎、工具或声明的使用方有此需求,就采用 ESM+CJS 双格式,并根据操作手册采取双包风险缓解措施。 - 明确编写导出映射(操作手册中包含 ESM-only 和双格式示例):
正确放置
types条件;仅为受支持的 API 导出子路径;在适用时设置sideEffects。 - 构建:当前默认使用 tsdown(有合理说明时可用 tsup)——启用声明文件生成,目标版本与
engines匹配。 - 保持 tarball 整洁:使用
files白名单(绝不翻查.npmignore历史),设置engines,并在仓库固定了包管理器时设置packageManager。 - 门禁——绝不跳过:
(检查 npm pack dry-run +bash "${CLAUDE_SKILL_DIR}/scripts/check_package.sh"publint+arethetypeswrong;确切命令见脚本;发现任何问题都会以非零状态退出。) - 诊断使用方错误(
ERR_REQUIRE_ESM、“找不到类型”):操作手册提供决策树——先确定使用方的 Node/模块上下文;可选方案包括明确支持范围、真正的双格式构建,或修正导出映射。 绝不要盲目添加 CJS。
输出规范
明确的导出映射;记录格式决策及其所依据的 engines;构建产物必须与导出映射声明的内容完全一致;files 白名单;两个门禁(publint、attw)均无问题;已检查 npm pack --dry-run 生成的 tarball。更改已发布包的格式或导出映射属于 semver-major——请明确说明。
注意事项
- 双包风险(两个模块实例)确实存在——单例/有状态包需要采用操作手册中的缓解措施,或在记录明确支持范围后仅使用 ESM。
- attw 的失败信息往往晦涩难懂;操作手册将其代码对应到具体的导出映射修复方法。
engines会影响后续的一切(node-ci中的 CI 矩阵、此处的格式选择)——应谨慎设置,绝不要默默继承。- 对
require(esm)支持矩阵按版本设门槛——使用时请根据 nodejs.org 文档重新核实 Node 版本范围。
文件
references/packaging-playbook.md—require(esm)矩阵、格式决策框架、导出映射示例、打包工具状态、风险缓解措施、错误决策树。scripts/check_package.sh— pack dry-run + publint + attw 门禁;发现问题时以非零状态退出;Node/npx 不可用时会显示清晰提示并降级处理。
评论
支持 Markdown