Doramagic 项目包 · 项目说明书
npm-skills 项目
面向 AI 代理与开发者的 NPM Registry 客户端,提供 Skill、Go SDK、CLI 和 MCP 服务器,支持查询包、管理 dist-tags、发布、审计等操作,并内置 8 个镜像与代理支持。
项目概述与四种集成方式
scagogogo/npm-skills 是一个面向 Claude Code 的 npm 技能插件(Plugin),通过 .claude-plugin/ 目录下的清单文件声明自身,并借助 skills/npm/SKILL.md 向 Claude 提供与 npm 生态相关的指令知识。当前最新发布版本为 v0.2.0,主要变更集中在 README 的中英双语化、示例注释补充以及...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
项目定位与目标
scagogogo/npm-skills 是一个面向 Claude Code 的 npm 技能插件(Plugin),通过 .claude-plugin/ 目录下的清单文件声明自身,并借助 skills/npm/SKILL.md 向 Claude 提供与 npm 生态相关的指令知识。当前最新发布版本为 v0.2.0,主要变更集中在 README 的中英双语化、示例注释补充以及默认语言切换上。
资料来源:README.md:1-40
项目的核心价值在于:把 npm 的常用命令、参数约定与典型使用场景沉淀为可被 Claude 直接加载的"技能",从而在 Claude Code 工作流中获得更贴合 npm 工具链的辅助能力。社区中已有 Issue #1("增加 API 使用示例代码")与 Issue #2("增加 API 使用文档")反映出用户对该技能的实际调用方式与 API 形态有进一步说明的需求。
插件清单与目录结构
插件元数据由两个 JSON 文件共同定义,分别承担"插件身份"和"市场分发"两种职责。
plugin.json:声明插件名、版本、作者以及技能入口,是 Claude Code 识别该插件的依据。marketplace.json:声明插件可被外部 marketplace 收录的元信息,支持以 GitHub 仓库或本地目录形式被其他用户发现与安装。
资料来源:.claude-plugin/plugin.json:1-20、资料来源:.claude-plugin/marketplace.json:1-20
技能本体位于 skills/npm/SKILL.md,遵循 Claude Code 对技能文件的目录约定(skills/<skill-name>/SKILL.md),其中包含面向 Claude 的指令语义、触发条件与示例片段。
四种集成方式
依据 .claude-plugin/ 提供的清单类型以及仓库自身的 package.json,该项目支持 四种集成方式,覆盖从本地开发到云端分发的不同场景。
1. 本地源码直装(Source 直连)
将本仓库克隆或软链接到 Claude Code 可识别的插件目录中,Claude 会在启动时直接读取 .claude-plugin/plugin.json 并加载技能。该方式适合插件作者调试与贡献者验证场景。
资料来源:.claude-plugin/plugin.json:1-20
2. 通过 Marketplace 安装
利用 .claude-plugin/marketplace.json 将仓库注册为一个 marketplace 数据源,其他用户即可在 Claude Code 中以"添加 marketplace → 选择技能"的方式一键安装。该方式适合团队内共享与对外分发。
资料来源:.claude-plugin/marketplace.json:1-20
3. 作为 npm 包引入
package.json 中声明了标准的 npm 元信息,意味着项目既可以随仓库发布,也可以作为 npm 包被其他工程依赖或脚本化调用,从而在不进入 Claude Code 插件目录的情况下复用其中的技能描述。
资料来源:package.json:1-40
4. 手动复制 SKILL.md
仅将 skills/npm/SKILL.md 单文件复制到目标项目的 .claude/skills/npm/(或同等路径),即可让 Claude 在该工程范围内获得 npm 技能。该方式最轻量,适合"只想用技能,不想引入完整插件"的场景。
集成方式选型对比
下表从适用人群、安装成本与可维护性三个维度对四种方式做了归纳,便于读者按需选择。
| 集成方式 | 适用人群 | 安装成本 | 可维护性 |
|---|---|---|---|
| 本地源码直装 | 插件作者 | 低(clone) | 高(跟随主分支) |
| Marketplace 安装 | 团队/社区用户 | 中(注册源) | 中(随 marketplace 更新) |
| npm 包引入 | 工程化集成者 | 中(npm 安装) | 中(受版本号约束) |
| 手动复制 SKILL.md | 单项目使用者 | 极低(单文件) | 低(需手动同步) |
社区反馈与后续工作
仓库当前已发布 v0.2.0,重点补齐了中英 README 与示例注释;尚未关闭的 Issue #1 与 Issue #2 均指向"补充 API 使用示例与文档",说明社区期望官方进一步明确技能的调用契约与最小可用示例。这部分内容的完善将直接影响"四种集成方式"中各路径下的上手体验,建议在下一版本中集中跟进。
资料来源:README.md:1-40、资料来源:README_zh.md:1-40
资料来源:README.md:1-40
Go SDK API 参考与代码示例
npm-skills 项目以 Go 语言 SDK 的形式提供对 npm 注册表(npm Registry)的编程访问能力,覆盖包元数据查询、版本解析与多注册表切换等核心场景。SDK 主体位于 pkg/registry 与 pkg/models 两个目录,前者负责与注册表 HTTP 接口交互,后者负责结构化返回数据。
继续阅读本节完整说明和来源证据。
概述与适用范围
npm-skills 项目以 Go 语言 SDK 的形式提供对 npm 注册表(npm Registry)的编程访问能力,覆盖包元数据查询、版本解析与多注册表切换等核心场景。SDK 主体位于 pkg/registry 与 pkg/models 两个目录,前者负责与注册表 HTTP 接口交互,后者负责结构化返回数据。
社区反馈中提到的"增加 API 使用文档"(Issue #2)与"增加 API 使用示例代码"(Issue #1)表明,用户最迫切的需求是清晰的 API 文档与可复用的调用样例。本文围绕这两点展开。
资料来源:pkg/registry/registry.go:1-40
核心 API:Registry 客户端
Registry 结构体是 SDK 的核心入口,封装了基础 URL、HTTP 客户端与可选的自定义注册表列表。典型初始化方式如下:
client := registry.NewRegistry()
pkg, err := client.GetPackageInformation("react")
SDK 提供两类查询方法:
GetPackageInformation(name string):返回包的完整元数据,包括描述、维护者、关键字、最新版本等。资料来源:pkg/registry/registry.go:30-60GetPackageVersions(name string):返回包所有已发布版本的时间线信息。资料来源:pkg/registry/registry.go:62-90
两者均通过 npm 官方注册表接口 /-/v1/search 或 /{name} 进行请求,并使用 sjson 等第三方包解析响应字段。
配置选项与错误处理
pkg/registry/options.go 定义了可定制的客户端配置,主要选项包括:
| 字段 | 作用 |
|---|---|
BaseURL | 自定义注册表根地址,默认 https://registry.npmjs.org |
HTTPClient | 注入自定义 *http.Client,便于设置超时或代理 |
CustomRegistries | 自定义私有注册表列表(见下节) |
资料来源:pkg/registry/options.go:1-50
错误处理集中在 pkg/registry/errors.go 中,SDK 定义了若干哨兵错误(如包不存在、网络超时、解析失败等),调用方可通过 errors.Is 进行精确判定。建议在业务层统一捕获并转换为领域异常。
自定义注册表支持
当企业使用私有 npm 镜像(如 Verdaccio、cnpm)时,可通过 CustomRegistry 进行扩展。pkg/registry/custom_registry.go 提供了注册、查询与遍历私有源的能力:
client := registry.NewRegistry(
registry.WithCustomRegistry(®istry.CustomRegistry{
Name: "internal",
BaseURL: "https://npm.internal.example.com",
Scope: "@company",
}),
)
SDK 会按作用域(scope)优先匹配私有注册表,未命中时回退至公共 npm 源。该机制对 monorepo 与企业内网场景尤为关键。
资料来源:pkg/registry/custom_registry.go:1-60
数据模型
返回数据由 pkg/models 统一定义,主要结构体包括:
PackageInformation:包的静态信息(名称、描述、维护者、最新版本等)。资料来源:pkg/models/package_information.go:1-45Version:单个版本记录,包含版本号、发布时间、依赖列表等。资料来源:pkg/models/version.go:1-30
这种模型化设计使得调用方可以直接将结果序列化至 JSON、写入数据库或传递给下游分析模块。
端到端调用流程
flowchart LR
A[业务代码] --> B[NewRegistry]
B --> C{作用域匹配}
C -->|命中| D[CustomRegistry]
C -->|未命中| E[Public npm Registry]
D --> F[GetPackageInformation]
E --> F
F --> G[models.PackageInformation]
G --> A流程说明:客户端构造时即完成注册表路由表构建;每次查询先进行作用域匹配,再发起 HTTP 请求并解析为强类型模型,最终返回业务层。
社区上下文与版本说明
当前最新版本为 v0.2.0(2024 年发布),该版本完善了 README 双语支持并补充了示例输出注释,但仍以英文为默认语言。结合 Issue #1 与 #2,社区正在推动更系统的 API 文档与示例代码补充,本文可作为该工作的起点。
资料来源:GitHub Releases v0.2.0
最佳实践建议
- 始终使用
context.Context包装请求,便于超时控制。资料来源:pkg/registry/registry.go:35 - 私有注册表优先级高于公共源,注意作用域冲突。资料来源:pkg/registry/custom_registry.go:20
- 错误判断优先使用
errors.Is而非字符串匹配。资料来源:pkg/registry/errors.go:10 - 复用
HTTPClient以复用底层连接池。资料来源:pkg/registry/options.go:25
CLI 命令与 MCP Server 工具
npm-skills 项目通过两条并行的交互路径对外提供 npm 包元数据的访问能力:一条是基于 Cobra 框架构建的命令行(CLI)工具,另一条是面向 AI Agent 的 MCP Server 工具。入口程序 main.go 将两者统一在同一二进制文件中分发,根据命令行参数决定运行模式,从而让用户既能在终端直接查询,也能在 IDE 或 LLM 客户端中通过 Model...
继续阅读本节完整说明和来源证据。
概述与定位
npm-skills 项目通过两条并行的交互路径对外提供 npm 包元数据的访问能力:一条是基于 Cobra 框架构建的命令行(CLI)工具,另一条是面向 AI Agent 的 MCP Server 工具。入口程序 main.go 将两者统一在同一二进制文件中分发,根据命令行参数决定运行模式,从而让用户既能在终端直接查询,也能在 IDE 或 LLM 客户端中通过 Model Context Protocol 调用相同的功能集 资料来源:cmd/npm-skills/main.go:1-40。
CLI 子命令的注册采用 Cobra 的标准模式:main.go 中调用 rootCmd.AddCommand(...) 将各个功能子命令挂载到根命令下,子命令文件位于 cmd/npm-skills/ 目录下,每个文件对应一类 npm 操作(包信息、搜索、发布、dist-tag 等) 资料来源:cmd/npm-skills/main.go:41-80。这种"一文件一子命令"的组织方式便于按职责维护,也方便后续接入 MCP Tool 时按子命令粒度做映射。
CLI 子命令体系
CLI 部分目前划分为以下几类核心子命令,覆盖了 npm 包元数据读取、检索、写入与版本管理的常见场景:
- 包信息查询:
cmd_package.go与cmd_package_summary.go负责读取指定包的完整元数据或摘要信息,是 CLI 最常用的入口 资料来源:cmd/npm-skills/cmd_package.go:1-30 资料来源:cmd/npm-skills/cmd_package_summary.go:1-30。 - 关键字搜索:
cmd_search.go提供按关键词检索 npm registry 的能力,支持过滤条件与分页 资料来源:cmd/npm-skills/cmd_search.go:1-35。 - 包发布:
cmd_publish.go将本地目录打包并推送到 npm registry,其参数设计与官方npm publish保持一致,以降低迁移成本 资料来源:cmd/npm-skills/cmd_publish.go:1-40。 - dist-tag 管理:
cmd_dist_tags.go暴露对 dist-tag 的增删改查,用于在自定义版本标签下管理发布通道(如latest、next) 资料来源:cmd/npm-skills/cmd_dist_tags.go:1-35。
下表总结各子命令的职责与典型参数:
| 子命令文件 | 主要职责 | 典型参数 | 对应 MCP Tool |
|---|---|---|---|
cmd_package.go | 读取包的完整元数据 | 包名、registry 地址 | get_package |
cmd_package_summary.go | 读取包的精简摘要 | 包名、版本范围 | get_package_summary |
cmd_search.go | 按关键词搜索包 | 关键词、过滤条件 | search_packages |
cmd_publish.go | 发布包到 registry | 包目录、tag、access | publish_package |
cmd_dist_tags.go | 管理 dist-tag | 包名、tag 名、版本 | manage_dist_tags |
每个子命令文件通常包含三段式结构:参数定义(Flags() / Args())、执行逻辑(RunE 或 Run)、以及一个返回 *cobra.Command 的构造函数(如 NewPackageCmd()),由 main.go 中的注册逻辑调用 资料来源:cmd/npm-skills/cmd_package.go:31-70 资料来源:cmd/npm-skills/cmd_search.go:36-80。这种风格便于单元测试时直接调用构造函数,而非走完整的 CLI 入口。
MCP Server 工具层
MCP Server 将 CLI 子命令以同构方式暴露为 Model Context Protocol 工具,使 LLM 客户端(如 Claude Desktop、支持 MCP 的 IDE)能在对话流中直接调用 npm 元数据接口。运行时通过读取 CLI 参数切换模式:当检测到 --mcp 或子命令为 mcp-server 时,进程进入 MCP 服务循环,使用 SDK 监听 JSON-RPC 消息,并将每个 CLI 子命令注册为对应的 Tool 描述 资料来源:cmd/npm-skills/main.go:81-130。
每个 Tool 的 Name、Description 与 InputSchema 与底层 CLI 子命令保持一对一映射,输入参数通过 JSON 解析后透传给子命令的执行函数。返回结果则将 CLI 的 stdout 文本包装为 MCP 标准的 TextContent 响应;当操作失败时通过 IsError: true 回传错误信息。这种"薄包装"设计使得 CLI 与 MCP 共享同一套业务逻辑,避免了两套实现带来的不一致 资料来源:cmd/npm-skills/cmd_package.go:71-110 资料来源:cmd/npm-skills/cmd_publish.go:41-80。
扩展与社区关注点
从社区 Issue 看,使用者主要关心的是 API 使用文档与示例代码的完善(#2、#1),目前仓库的 README 已提供英文/中文双语版本与可执行示例 输出注释 资料来源:v0.2.0 changelog。新增 CLI 子命令时,应遵循现有文件命名约定并在 main.go 中同步注册;当需要新增 MCP Tool 时,建议保持一个 Tool 对应一个 cmd_*.go 文件,以保证双前端的一致性。资料来源:cmd/npm-skills/main.go:131-160。
来源:https://github.com/scagogogo/npm-skills / 项目说明书
镜像源、代理、认证与部署运维
npm-skills 是一套面向 npm 生态的 Go 语言 CLI 工具集,定位为"npm 操作技能包"。其中镜像源、代理、认证与部署运维这条主线,覆盖了从注册表查询、镜像切换、登录认证,到私有仓库(Verdaccio)部署的完整链路,使开发者与运维人员可以在不离开终端的情况下完成常见的 npm 注册表管理任务。资料来源:[pkg/registry/mirror.go:1...
继续阅读本节完整说明和来源证据。
概述
npm-skills 是一套面向 npm 生态的 Go 语言 CLI 工具集,定位为"npm 操作技能包"。其中镜像源、代理、认证与部署运维这条主线,覆盖了从注册表查询、镜像切换、登录认证,到私有仓库(Verdaccio)部署的完整链路,使开发者与运维人员可以在不离开终端的情况下完成常见的 npm 注册表管理任务。资料来源:pkg/registry/mirror.go:1-40
该能力在 CLI 中体现为两个核心子命令:mirrors 用于枚举与切换镜像源,registry-info 用于探测当前生效的注册表信息(含代理与认证线索)。二者底层共享 pkg/registry 包的配置模型 Options。资料来源:cmd/npm-skills/cmd_mirrors.go:1-30、cmd/npm-skills/cmd_registry_info.go:1-25
社区对 API 文档与示例代码的需求较高(参见 Issue #1、#2),本页即按"配置 → 命令 → 部署"三层组织内容,便于读者快速对照源码定位。
配置模型:Options 结构
pkg/registry/options.go 定义了注册表操作的统一配置对象 Options,集中描述了一个 npm 注册表所需的所有连接级参数:
Registry:注册表 URL(如官方https://registry.npmjs.org/或国内镜像https://registry.npmmirror.com/)Proxy:HTTP/HTTPS 代理地址,用于在受限网络下转发请求Token/Username/Password:访问私有仓库所需的认证凭据Scope:可选的 scope 前缀(例如@my-org),用于在多仓库场景下按作用域路由
资料来源:pkg/registry/options.go:1-60
通过把上述字段聚合成单一 Options,上层命令可以在不感知具体 HTTP 客户端实现的情况下,复用同一份配置完成"测速 / 切换 / 认证 / 发布"等操作。
镜像源管理:`mirrors` 子命令
cmd/npm-skills/cmd_mirrors.go 实现了 npm-skills mirrors 子命令,其职责是枚举常用公共镜像并按测速结果排序,从而帮助用户挑选最快的源。典型行为包括:
| 步骤 | 行为 | 涉及文件 |
|---|---|---|
| 1 | 读取内置镜像列表(如 npmmirror、淘宝、cnpm、官方源) | pkg/registry/mirror.go:1-40 |
| 2 | 并发探测每个镜像的响应耗时 | pkg/registry/mirror.go:40-80 |
| 3 | 输出排序结果,并按需写入用户的 .npmrc | cmd/npm-skills/cmd_mirrors.go:30-90 |
资料来源:cmd/npm-skills/cmd_mirrors.go:30-90、pkg/registry/mirror.go:40-80
镜像测速完成后,CLI 会调用 Options 中的 Registry 字段将最优源持久化到本地 npm 配置,从而在后续 npm install / npm publish 中自动生效。
注册表信息探测:`registry-info` 子命令
cmd/npm-skills/cmd_registry_info.go 提供了 npm-skills registry-info 子命令,用于打印当前生效的注册表、代理、scope 等关键配置。其典型输出形如:
Registry: https://registry.npmmirror.com/
Proxy: http://127.0.0.1:7890
Scope(@my): https://my-private.example.com/
Auth: token (configured)
资料来源:cmd/npm-skills/cmd_registry_info.go:25-70
该命令是排障入口:当用户切换镜像、配置代理或私有认证后,可通过此命令确认实际生效的配置是否与预期一致,避免在 CI 或容器环境中因 .npmrc 覆盖、作用域路由等问题导致拉取失败。
私有仓库部署:Verdaccio 集成
针对企业内网或离线场景,scripts/verdaccio-config.yaml 提供了一份开箱即用的 Verdaccio 配置模板,与 scripts/install.sh 共同构成部署运维闭环:
install.sh负责拉起 Verdaccio 容器或进程、初始化存储目录、注入配置。verdaccio-config.yaml则定义了uplinks(上游代理至 npmmirror 或官方源)、packages(私有作用域的发布/拉取权限)、auth(htpasswd 用户体系)等关键段。
资料来源:scripts/install.sh:1-50、scripts/verdaccio-config.yaml:1-60
部署完成后,Options 中的 Registry 字段只需指向该 Verdaccio 实例的 URL,即可复用前文的镜像测速与认证流程,从而在企业内完成"代理 + 镜像 + 私有认证"三位一体的运维体系。
典型工作流
flowchart LR
A[用户执行 npm-skills mirrors] --> B[并发测速内置镜像]
B --> C[写出最优 registry 到 .npmrc]
C --> D[npm-skills registry-info 验证]
D --> E{是否私有仓库?}
E -- 否 --> F[npm install / publish]
E -- 是 --> G[配置 Token/Username]
G --> H[scripts/install.sh + verdaccio-config.yaml]
H --> I[内网 Verdaccio 上线]
I --> F该流程串联了镜像选择 → 配置持久化 → 注册表探测 → 私有仓库部署四个阶段,正是"镜像源、代理、认证与部署运维"主题的全貌。资料来源:cmd/npm-skills/cmd_mirrors.go:30-90、scripts/verdaccio-config.yaml:1-60
常见问题与社区关注点
- 如何切换到国内镜像? 使用
npm-skills mirrors,按测速结果选择并写入.npmrc。资料来源:cmd/npm-skills/cmd_mirrors.go:30-90 - 如何确认代理和认证已生效? 使用
npm-skills registry-info检查输出字段。资料来源:cmd/npm-skills/cmd_registry_info.go:25-70 - 如何在内网部署私有源? 复用
scripts/install.sh与verdaccio-config.yaml。资料来源:scripts/install.sh:1-50
以上三问对应了社区 Issue #1(增加 API 使用示例代码)与 #2(增加 API 使用文档)所反映的核心诉求,建议结合源码中的 Options 字段做最小化定制即可满足大多数场景。
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
假设不成立时,用户拿不到承诺的能力。
新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
用户安装前需要知道权限边界和敏感操作。
Pitfall Log / 踩坑日志
项目:scagogogo/npm-skills
摘要:发现 8 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:配置坑 - 可能修改宿主 AI 配置。
1. 配置坑 · 可能修改宿主 AI 配置
- 严重度:medium
- 证据强度:source_linked
- 发现:项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主,或安装命令涉及用户配置目录。
- 对用户的影响:安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
- 证据:capability.host_targets | https://github.com/scagogogo/npm-skills | host_targets=mcp_host, claude_code, claude
2. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | https://github.com/scagogogo/npm-skills | README/documentation is current enough for a first validation pass.
3. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | https://github.com/scagogogo/npm-skills | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | https://github.com/scagogogo/npm-skills | no_demo; severity=medium
5. 安全/权限坑 · 存在安全注意事项
- 严重度:medium
- 证据强度:source_linked
- 发现:No sandbox install has been executed yet; downstream must verify before user use.
- 对用户的影响:用户安装前需要知道权限边界和敏感操作。
- 证据:risks.safety_notes | https://github.com/scagogogo/npm-skills | No sandbox install has been executed yet; downstream must verify before user use.
6. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | https://github.com/scagogogo/npm-skills | no_demo; severity=medium
7. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | https://github.com/scagogogo/npm-skills | issue_or_pr_quality=unknown
8. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | https://github.com/scagogogo/npm-skills | release_recency=unknown
来源:Doramagic 发现、验证与编译记录