【npm】如何创建自己的npm私有仓库?

创建自己的 npm 私有库(私有包托管或私有 registry)有多种方案,根据你的需求(如免费、简单自建、企业级、托管服务)可以选择不同方式。以下是当前(2025 年底)主流方案的总结,按推荐优先级和适用场景排序:

1. 免费托管在 GitHub Packages(推荐入门/小团队免费方案)

  • 描述 :直接利用 GitHub 的 Packages 服务托管私有 npm 包,与你的私有 Git 仓库关联。包名通常为 @your-org/package-name
  • 优点
    • 完全免费(即使私有包)。
    • 无需额外服务器,集成 GitHub 权限管理(仓库访问者自动有包访问权)。
    • 支持 scoped 包,发布简单。
  • 缺点
    • 需要 GitHub 账户和 Personal Access Token (PAT) 配置认证。
    • 存储限额取决于 GitHub 计划(免费版足够小团队)。
  • 步骤简要
    1. 在 package.json 中设置 "publishConfig": { "registry": "https://npm.pkg.github.com/" }
    2. 创建 PAT(scopes: read:packages, write:packages)。
    3. 配置 .npmrc 文件添加 token 和 registry。
    4. npm publish 即可。
  • 适用:个人或小团队,不想自建服务器。

2. 自建私有 registry 使用 Verdaccio(推荐自建轻量方案)

  • 描述:Verdaccio 是一个开源、轻量的 Node.js 私有 npm registry,支持代理公共 npm(缓存加速)、私有包发布,无需数据库。
  • 优点
    • 零配置启动,免费开源。
    • 支持 Docker 部署,易扩展(插件、认证)。
    • 可以缓存公共包,内网加速下载。
    • 界面友好,支持用户管理。
  • 缺点
    • 需要自己的服务器(VPS 或内网机)。
    • 大规模需考虑存储和备份。
  • 步骤简要
    1. npm install -g verdaccio 或用 Docker 运行。
    2. 启动后访问 http://localhost:4873
    3. 配置 uplink 代理 npmjs.org 或 taobao 镜像。
    4. npm set registry http://your-server:4873 并登录发布。
  • 适用:公司内网、私有化需求强,想控制一切。

3. 直接从 Git 仓库安装(最简单、无 registry 方案)

  • 描述:不建 registry,直接在 package.json 中依赖私有 Git 仓库(如 GitHub/GitLab 私有 repo)。

  • 示例

    复制代码
    "dependencies": {
      "@myorg/my-package": "git+ssh://git@github.com/myorg/my-package.git#v1.0.0"
    }
  • 优点:零成本、无需额外工具,版本用 tag 或 branch 控制。

  • 缺点:不是真正的 npm 包发布(无版本语义化管理)、安装需 SSH/HTTPS 认证、CI 中麻烦。

  • 适用:极简需求、临时共享代码。

4. 官方 npmjs.com 私有包(付费托管方案)

  • 描述:直接在 npm 官网发布私有 scoped 包(@yourname/package)。
  • 优点
    • 最官方、无缝集成公共 npm。
    • 支持组织(Orgs)和团队权限。
  • 缺点:付费(Pro 版约 $7/用户/月起,支持无限私有包)。
  • 适用:愿意付费、想和公共 npm 统一管理的企业。

5. 其他云托管或企业级方案

  • GitLab Package Registry:类似 GitHub,免费私有包托管,集成 GitLab CI。
  • AWS CodeArtifact:AWS 用户专用,付费,按使用计费。
  • Sonatype Nexus Repository:企业级,支持 npm + Maven 等多格式,免费社区版可用,但配置复杂。
  • JFrog Artifactory:类似 Nexus,强大但付费为主。

选择建议

  • 个人/小项目免费:优先 GitHub Packages 或直接 Git 依赖。
  • 公司内网/需要缓存加速:自建 Verdaccio(最流行,轻量)。
  • 大规模企业:Nexus 或付费 npm Orgs。
  • 注意事项:私有包发布时,避免在 package.json 中设 "private": true(会阻止发布),scoped 包默认私有。

如果你有具体需求(如预算、服务器环境、团队规模),可以提供更多细节,我可以给出更针对性的步骤!

相关推荐
JS_GGbond2 小时前
前端Token无感刷新:让用户像在游乐园畅玩一样流畅
前端
用户8168694747252 小时前
Context API 的订阅机制与性能优化
前端·react.js
用户49394095229352 小时前
Function.prototype.bind实现
前端
AAA阿giao2 小时前
Vue3 调用 Coze 工作流:从上传宠物照到生成冰球明星的完整技术解析
前端·vue.js·coze
异界蜉蝣2 小时前
React Fiber架构:Diff算法的演进
前端·react.js·前端框架
追梦_life2 小时前
localStorage使用不止于getItem、setItem、removeItem
前端·javascript
全栈陈序员2 小时前
请描述下你对 Vue 生命周期的理解?在 `created` 和 `mounted` 中请求数据有什么区别?
前端·javascript·vue.js·学习·前端框架
无限大62 小时前
用三行代码实现圣诞树?别逗了!让我们来真的
前端·javascript
init_23612 小时前
label-route-capability
服务器·前端·网络