【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 包默认私有。

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

相关推荐
kyriewen8 分钟前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒27 分钟前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫1 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus1 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬3 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao3 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端
Highcharts.js3 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化
螺丝钉tina4 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript
小天源5 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
Highcharts.js6 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格