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 的中英双语化、示例注释补充以及...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 1. 本地源码直装(Source 直连)

继续阅读本节完整说明和来源证据。

章节 2. 通过 Marketplace 安装

继续阅读本节完整说明和来源证据。

章节 3. 作为 npm 包引入

继续阅读本节完整说明和来源证据。

项目定位与目标

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 形态有进一步说明的需求。

资料来源:skills/npm/SKILL.md:1-30

插件清单与目录结构

插件元数据由两个 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 的指令语义、触发条件与示例片段。

资料来源:skills/npm/SKILL.md:1-50

四种集成方式

依据 .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 技能。该方式最轻量,适合"只想用技能,不想引入完整插件"的场景。

资料来源:skills/npm/SKILL.md:1-30

集成方式选型对比

下表从适用人群、安装成本与可维护性三个维度对四种方式做了归纳,便于读者按需选择。

集成方式适用人群安装成本可维护性
本地源码直装插件作者低(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/registrypkg/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 提供两类查询方法:

两者均通过 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(&registry.CustomRegistry{
        Name:    "internal",
        BaseURL: "https://npm.internal.example.com",
        Scope:   "@company",
    }),
)

SDK 会按作用域(scope)优先匹配私有注册表,未命中时回退至公共 npm 源。该机制对 monorepo 与企业内网场景尤为关键。

资料来源:pkg/registry/custom_registry.go:1-60

数据模型

返回数据由 pkg/models 统一定义,主要结构体包括:

这种模型化设计使得调用方可以直接将结果序列化至 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

最佳实践建议

  1. 始终使用 context.Context 包装请求,便于超时控制。资料来源:pkg/registry/registry.go:35
  2. 私有注册表优先级高于公共源,注意作用域冲突。资料来源:pkg/registry/custom_registry.go:20
  3. 错误判断优先使用 errors.Is 而非字符串匹配。资料来源:pkg/registry/errors.go:10
  4. 复用 HTTPClient 以复用底层连接池。资料来源:pkg/registry/options.go:25

资料来源:pkg/registry/registry.go:1-40

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 包元数据读取、检索、写入与版本管理的常见场景:

下表总结各子命令的职责与典型参数:

子命令文件主要职责典型参数对应 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、accesspublish_package
cmd_dist_tags.go管理 dist-tag包名、tag 名、版本manage_dist_tags

每个子命令文件通常包含三段式结构:参数定义(Flags() / Args())、执行逻辑(RunERun)、以及一个返回 *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 的 NameDescriptionInputSchema 与底层 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-30cmd/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输出排序结果,并按需写入用户的 .npmrccmd/npm-skills/cmd_mirrors.go:30-90

资料来源:cmd/npm-skills/cmd_mirrors.go:30-90pkg/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-50scripts/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-90scripts/verdaccio-config.yaml:1-60

常见问题与社区关注点

以上三问对应了社区 Issue #1(增加 API 使用示例代码)与 #2(增加 API 使用文档)所反映的核心诉求,建议结合源码中的 Options 字段做最小化定制即可满足大多数场景。

资料来源:pkg/registry/options.go:1-60

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

medium 可能修改宿主 AI 配置

安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。

medium 能力判断依赖假设

假设不成立时,用户拿不到承诺的能力。

medium 维护活跃度未知

新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。

medium 存在安全注意事项

用户安装前需要知道权限边界和敏感操作。

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 发现、验证与编译记录