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

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

相关推荐
Lee川5 小时前
Milvus 实战:当 RAG 遇上向量数据库,从"玩具 Demo"到"生产可用的"那一步
前端·数据库·人工智能
anOnion5 小时前
构建无障碍组件之Toolbar Pattern
前端·html·交互设计
惊鸿一博6 小时前
图标加载方式_zeroIcon_是否加前缀mdi
开发语言·前端·javascript
2501_940041746 小时前
前端工程化进阶:5个高交互与可视化项目提示词
前端
你很易烊千玺6 小时前
JS 异步 从零讲(大白话 + 真实场景 + 可运行案例)
前端·javascript·vue.js
why技术8 小时前
AI Coding开始进入第四个时代,我还没上车呢!
前端·人工智能·后端
大家的林语冰9 小时前
CSS 已死?DOM 性能黑洞!Pretext 排版革命让你在文本间跳舞,没有 DOM 也能纵享丝滑~
前端·javascript·css
vipbic9 小时前
我也该升级了,陪伴了我7年的博客
前端
Lee川9 小时前
RAG 实战:从一篇掘金文章出发,拆解检索增强生成的全链路
前端·人工智能·后端
Lee川9 小时前
MCP 高德地图实战:当 AI 学会使用工具,一个协议如何重塑大模型的行动边界
前端·人工智能·后端