关于 npm
npm 是用于 npm Registry 账户与包发布任务的技能,面向处理身份验证、包预留和发布的开发者。它通过共享认证脚本管理临时 npm 配置,并规定凭据异常或包目标不符时停止操作。
主要功能
- 01检查 Registry 身份与包可用性
- 02处理认证与账户问题
- 03发布本地包并验证可见性
- 04预留包名并处理逐包失败
- 05运行离线回归测试
适用场景
- 01检查当前 npm Registry 账户
- 02发布仓库对应的包版本
- 03为包名发布占位包
- 04在合成环境中运行回归测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ steipete/ agent-scripts --skill npm安装后在 Claude Code 中输入/npm确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/npm-auth-cache.mjsnpm-auth-cache.test.mjsnpm-auth-login.mjsnpm-auth-login.test.mjsnpm-auth.shnpm-auth.test.shnpm-cli-test-helpers.mjsnpm-service.shpublish-package.shpublish-package.test.shreserve-packages.sh详细介绍
npm
用于 npm 注册表/账户任务:npm whoami、检查软件包可用性、预留软件包、发布、检查组织以及排查身份验证问题。
身份验证
- 首先使用
one-password了解密钥规则。 - 切勿直接在 shell 工具中运行
op。 - 主要条目:
Molty中的npm Registry - steipete - Release Automation。 - 默认使用
OP_SERVICE_ACCOUNT_TOKEN;无需解锁桌面应用。该条目包含可用的注册表会话(registry_token),以及用户名/密码/TOTP 备用凭据。 - 仅在明确指定时使用桌面端
npmjs备用方式:当 Molty 不可用且用户希望使用备用方式时,传入--account my.1password.com。明确提出release/publish请求即表示同意解锁提示。 - 如果条目缺失、账户/保险库不明确、凭据格式错误、npm 拒绝访问软件包,或请求的软件包/版本与仓库发布目标不符,请停止并询问。
- 在共享的
op-worktmux 会话(clawdbot-op.sock;参见one-password)中的一个任务窗口内执行 npm 身份验证操作。失败时重用该窗口;npm 任务完成后将其关闭。切勿创建专用于 npm 的 socket 或会话。 - 在临时 npmrc 中保存 npm 身份验证信息;命令执行后将其删除。
- 所有辅助脚本共用
scripts/npm-auth.sh:优先使用已保存的registry_token会话,然后使用scripts/npm-auth-login.mjs和新生成的六位 OTP 登录注册表;成功的备用会话会缓存回同一条目。不要自行编写字段提取、注册表登录或缓存写入逻辑。 - 支持已安装技能目录的符号链接。Shell 入口会解析物理路径中的同级文件;被 source 的
npm-auth.sh会管理NPM_AUTH_SCRIPT_DIR,但不会更改调用方的SCRIPT_DIR或工作目录。Node 辅助脚本也支持文件符号链接,包括--preserve-symlinks-main。 - 凭据选择优先使用规范字段
id,其次是purpose,然后是唯一标签;如果仅按标签匹配到重复项,则拒绝使用(旧版npmjs可能保留同标签字段)。 - 对于临时的、需要身份验证的注册表命令,使用
scripts/npm-service.sh -- <npm args...>;对于本地软件包,使用publish-package.sh。 - npm 11 的提示符管道方式不可靠;避免使用
printf ... | npm login --auth-type=legacy。 - 除非必要,否则避免使用
expect执行 npm 登录;日志可能会回显提示内容,而且很容易出错。 - 自动化时优先使用辅助脚本的注册表 API 登录路径(
npm-profileloginCouch)。 - 如果身份验证格式不明确,或
npm whoami失败,请停止并询问确切的字段标签/凭据修正方式。不要继续探查其他 1Password 条目,也不要打开其他 tmux 窗口/会话。
发布软件包
在软件包根目录中,于同一个身份验证 tmux 窗口内执行:
/Users/steipete/Projects/agent-scripts/skills/npm/scripts/publish-package.sh
辅助脚本会验证身份、拒绝已存在的软件包版本、使用新 OTP 发布、在 OTP 过期时重试一次、使用同一个临时 npmrc 验证注册表可见性(包括受限软件包),并清理身份验证文件。
预留软件包
在同一个 tmux 窗口内使用 scripts/reserve-packages.sh:
/Users/steipete/Projects/agent-scripts/skills/npm/scripts/reserve-packages.sh package-one package-two
它的功能:
- 通过
op读取一次 Molty 发布自动化条目 - 重用已保存的注册表会话,或使用用户名/密码/TOTP 创建会话
- 发布带有通用 README 的
0.0.0占位软件包 - 单个软件包发布失败后继续处理
- 在日志中隐藏令牌/OTP
- 清理临时 npmrc/工作目录
注意:
- npm 可能会因名称与已发布名称过于相似而拒绝该名称。将其视为注册表策略结果,而不是身份验证失败。
- npm CLI 提示符管道方式在 npm 11 中不可靠。优先使用辅助脚本的注册表 API 登录路径,而不是脚本化的
npm login。 - 对于带作用域的软件包,即使软件包存在,
npm view也可能延迟显示或返回 404。请检查npm access get status <pkg>;public或提示previously published versions的发布失败信息,表示该名称已被预留。
离线回归测试
从仓库根目录运行;仅使用合成测试数据,不使用真实的 1Password/npm 身份验证。务必使用空环境(Shell 模拟程序会检查其环境中是否泄露令牌):
test_home="$(mktemp -d)"
(
set -e
trap 'rm -rf "$test_home"' EXIT
env -i HOME="$test_home" PATH="$PATH" node --test skills/npm/scripts/*.test.mjs </dev/null
env -i HOME="$test_home" PATH="$PATH" /bin/bash skills/npm/scripts/npm-auth.test.sh </dev/null
)
评论
支持 Markdown