Bun npm Publishing 技能用于将基于 Bun 构建的包发布到 npm registry,覆盖配置、打包、签名与自动化发布等环节。
用途与适用场景: 该技能适用于配置 package.json 以便发布到 npm、向 npm registry 发布包、使用 bin 打包 CLI 工具、配置 provenance 签名,以及设置 release-please 发布自动化、在发布前校验 tarball 内容。安装或更新依赖不属于本技能范围(应使用 bun-package-manager,配合 bun-add 快速添加);发布前的构建或打包也不属于本技能范围(应使用 bun-development,配合 bun-build 快速构建)。
package.json 配置: 发布相关的关键字段包括 name、version、description、main(入口)、type(module 表示 ESM,commonjs 表示 CJS)、files(打包白名单)、scripts 中的 build 与 prepublishOnly,以及 engines(运行时版本要求,如 node >=20.0.0、bun >=1.0.0)。作用域包(@org/name)需要显式 public 访问权限,可在 publishConfig 中设置 access 为 public,或在命令行使用 npm publish --access public。
CLI 工具打包: 通过 bin 字段配置可执行入口,如 {"bin": {"mycli": "build/index.js"}};单命令包可使用 bin 为字符串形式。入口需要 shebang(#!/usr/bin/env node)并具备可执行权限,构建脚本中需包含 chmod +x build/index.js。技能还给出了 Makefile 集成示例(build-prod 与 publish 目标)。
发布命令与 provenance: 标准发布使用 npm publish(会触发 prepublishOnly),作用域包需加 --access public,可用 --dry-run 预览发布、npm pack --dry-run 查看将发布的文件。provenance 签名通过 npm publish --provenance --access public 启用,需要 CI 环境(GitHub Actions、GitLab CI)、工作流中的 id-token: write 权限以及配置 npm registry-url。
files 白名单: 建议在 files 中包含 build/、README.md、LICENSE,以及构建输出、类型定义和面向用户的配置脚本。node_modules/、.git/、.env*、.log 已由 npm 自动排除,无需列出;src/、tests/、.test.ts、.github/ 等可通过 .npmignore 显式排除。
release-please 自动化: 技能提供了 .github/workflows/release-please.yml 工作流示例:在 push 到 main 时运行 release-please-action@v4(release-type 为 node),当 release_created 为 true 时执行发布任务,步骤包括 checkout、setup-node(node-version 24、registry-url 为 https://registry.npmjs.org)、setup-bun、bun install --frozen-lockfile、bun run build,以及带 NODE_AUTH_TOKEN 的 npm publish --provenance --access public。版本号遵循约定式提交:feat: 升 minor、fix: 升 patch、feat!: 或 BREAKING CHANGE: 升 major,chore:/docs:/refactor: 不升版本。
发布前校验: 可通过 prepublishOnly 挂载构建钩子;完整校验包括类型检查(bun run tsc --noEmit)、lint(bun run check)、测试(bun test)、构建(bun run build)与 npm pack --dry-run 验证 tarball 内容。发布元数据还可配置 repository、homepage、bugs、keywords、author、license。
常用命令与标志: --access public 用于作用域包、--provenance 启用来源签名、--dry-run 预览、--tag <tag> 使用 dist-tag 发布(如 beta)。脚本钩子包括 prepublish、prepublishOnly、prepack、postpack、postpublish。CI 环境变量有 NODE_AUTH_TOKEN 与 NPM_TOKEN。
常见问题处理: 作用域包 402 错误需加 --access public;tarball 缺失文件可用 npm pack --dry-run 排查并检查 files 数组;安装后二进制不可执行需确认入口 shebang 与构建脚本中的 chmod。2FA 发布(EOTP)无法在非交互环境自动完成:人工交互可使用 npm publish --otp=<6位验证码>,CI 非交互环境应使用 Granular/Automation token 绕过发布时的 2FA,放入 NODE_AUTH_TOKEN / NPM_TOKEN,这也是 release-please 工作流可顺利发布而本地发布提示输入的原因。首次发布后公共读取可能出现数分钟 404(传播延迟),不代表发布失败,可用 npm access list packages、npm view @org/pkg@<version> _id、npm pack @org/pkg@<version> 进行鉴权且锁定版本的校验;npm config get 读取 token 可能为空,应使用 npm CLI 自身而非手写 curl 测试。
限制: 该技能聚焦 npm 发布流程,不负责依赖安装更新与构建打包;2FA 交互发布无法由非交互环境或智能体自行完成,需交给用户或改用自动化 token;资料未提供价格或收费信息。