240

Npm 听起来像是一个在组织内使用的好平台,很好奇是否可以使用私有 repo,比如 Nexus/Maven。谷歌上什么都没有:(

4

14 回答 14

212

https://github.com/isaacs/npmjs.org/:在 npm 版本 v1.0.26 中,您可以在 package.json 文件中指定私有 git 存储库 url 作为依赖项。我没有使用它,但希望得到反馈。这是您需要做的:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://git@yourgitserver.com:my-app.git#v0.0.1",
    }
}

以下帖子讨论了这一点:可调试:私有 npm 模块

于 2011-10-18T12:34:06.007 回答
103

我不认为有一个简单的方法可以做到这一点。

查看 npm 文档告诉我们,这是可能的:

我可以运行自己的私有注册表吗?

是的!

最简单的方法是复制沙发数据库,​​并使用相同(或相似)的设计文档来实现 API。

如果您从官方 CouchDB 设置连续复制,然后将您的内部 CouchDB 设置为注册表配置,那么您将能够读取任何已发布的包,以及您的私有包,并且默认情况下只会在内部发布。如果你想发布一个包让全世界看到,你可以简单地覆盖该--registry命令的配置。

在时钟博客中还有一个关于如何创建私有 npm 存储库的优秀教程。

编辑(2017-02-26):

不是很新,但现在有付费计划在 npm 上托管私有包。

多年来,通过建立在 npm 之上的庞大的前端生态系统,npm 也成为许多非 Node.js 公司的一个因素。如果您的公司已经在运行Sonatype Nexus以在内部托管 Java 项目,您也可以使用它来托管内部 npm 包。

其他选项包括JFrog ArtifactoryInedo ProGet,但我没有使用过这些。

于 2011-09-28T01:02:43.260 回答
93

有一个易于使用的 npm 包来执行此操作。 https://www.npmjs.org/package/sinopia

简而言之,Sinopia 是一个私有/缓存的 npm 存储库服务器,您可以使用零配置进行设置。

Sinopia 可用于:

  • 发布自己的私有包而不将其暴露给公众
  • 仅缓存使用的公共包(无需复制整个公共注册表)
  • 用内部生成的修改版本覆盖公共包。
于 2014-02-28T23:13:12.790 回答
56

Verdaccio是我一直在寻找的东西,它应该得到它自己的答案;)它是 Sinopia 的一个积极维护的分支(在这里得到高度评价的答案)。它是一个作为 npm 包的 npm 注册表,可以在

这里:https ://github.com/verdaccio/verdaccio ,
这里:https ://www.verdaccio.org ,
等等port number: 4873

使用PM2运行

npm i -g verdaccio pm2
pm2 start --name verdaccio `which verdaccio`
pm2 save

使用docker运行

docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

使用Helm运行

helm repo add verdaccio https://charts.verdaccio.org
helm repo update
helm install verdaccio/verdaccio
于 2018-06-12T10:39:58.933 回答
28

2015 年 4 月 14 日,引入了npm 私有模块

当您为私有模块付费时,您可以:

  • 托管任意数量的私有包
  • 将这些软件包的读取权限或读写权限授予任何其他付费用户
  • 安装和使用其他付费用户授予您读取权限的任何软件包
  • 协作处理其他付费用户授予您写入权限的任何软件包

当然它不是免费的——目前每个用户每月 7 美元。

它仍然是一项相当新的服务。例如,缺少对组织帐户的支持(截至 2015 年 6 月):

目前,私人包仅适用于个人用户,但对组织帐户的支持即将推出。同时,请随时为您的组织创建用户,我们可以在支持时将其升级为组织。

所以虽然不完美,但它是维护私有包的官方npm 解决方案,这本身就值得一提。

更新

Npm Private Packages现在可用,为个人用户和组织提供计划:

  • 无限数量的公共和私人包
  • 7 美元/月/开发人员
  • 包括一个范围名称,基于组织名称
  • 发布和控制对@org-name/foo 的访问

(免责声明:甚至与npm, Inc.没有任何远程关联)

于 2015-06-04T09:31:24.397 回答
22

支持私有 npm 注册表的存储库管理器:

于 2014-12-08T17:20:49.737 回答
10

我想这个线程需要更新。如果您查看任何可用的 npm 注册表,它们都非常繁重,并且需要 couchdb。Gemfurry 和其他人需要你从公共回购中分叉。一些像 shadow-npm 这样的 npm没有最近的提交

然后,我们找到了雷吉。它有一个很好的提交活动,非常容易安装和使用,并且有很好的社区支持。它的重量非常轻,您不必处理 couchdb 等。

于 2013-10-29T19:44:13.510 回答
9

如果我不能很好地理解你的问题,请原谅我,但这是我的答案:

您可以创建一个私有 npm 模块并使用 npm 的常规命令来安装它。大多数 node.js 用户使用 git 作为他们的存储库,但您可以使用任何适合您的存储库。

  1. 在您的项目中,您将需要 NPM 包的骨架。大多数节点模块都有 git 存储库,您可以在其中查看它们如何与 NPM 集成(我相信 package.json 文件是其中的一部分,NPM 的网站向您展示了如何制作 npm 包)
  2. 使用类似于 Make 的东西来制作和压缩您的包,以便从 Internet 或您的网络中获取它,以便为 npm install 下载暂存。
  3. 制作好包裹后,请使用

    npm 安装 *tarball_url*

于 2011-09-27T23:35:08.467 回答
7

这是我知道的最简单的方法 - 使用Gemfury私有 npm 注册表将其托管在云中。

它是免费的,您可以使用您的 Github 帐户登录。与设置自己的数据库相比,它应该为您节省大量时间。

于 2013-06-03T16:38:24.930 回答
7

我们使用的是 Sonatype Nexus,版本是 Nexus Repository ManagerOSS 3.6.1-02。而且我确信它支持 NPM 私有存储库并缓存了包。

在此处输入图像描述

于 2018-01-26T18:46:25.807 回答
5

聚会有点晚了,但 NodeJS(我猜是 11 月 14 日左右)支持企业 NPM 存储库——你可以在他们的官方网站上找到更多信息。

粗略一看,npmE 似乎允许对 NPM 存储库进行直通镜像——也就是说,如果在您的内部存储库中找不到包,它会在真正的NPM 存储库中查找包。看起来很有用!

npm Enterprise 是一个本地解决方案,用于在您的组织内安全地共享和分发 JavaScript 模块,来自维护 npm 和公共 npm 注册表的团队。它专为需要的团队而设计:

私有模块的轻松内部共享 更好地控制开发和部署工作流程 围绕部署开源模块更严格的安全性 符合法律要求以在本地托管代码 npmE 是私有 npm

npmE 是一个 npm 注册表,可与您已经使用的相同标准 npm 客户端一起使用,但提供了现在热情采用 node 的大型组织所需的功能。它由 npm, Inc. 构建,该公司是 npm 开源项目的赞助商和公共 npm 注册表的主机。

不幸的是,它不是免费的。您可以试用,但它是商业软件。这对于独立开发者来说不是那么好,但如果你是独立开发者,你有 GitHub :-)

于 2015-03-06T16:24:44.053 回答
3

这篇文章讨论了如何设置私有注册表

  • 确保 couchdb 已安装在您的系统中
  • 复制 npmjs.org 使用以下命令

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"
    

请注意,"continuous":true在命令中,它利用了 CouchDB 的 _changes API,并在通知此 API 时提取任何新更改。

如果您想停止这些复制,您可以轻松添加"cancel":true. 然后脚本将是

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true}' -H "Content-Type: application/json"

然后去npmjs.org 自述文件安装 npm(确保已安装)。吹是所有的步骤nodejsgit

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 
于 2013-06-23T09:40:45.397 回答
2

我参加聚会可能有点晚了,但这两个中的任何一个都可能对你有用:

  1. http://www.jfrog.com/confluence/display/RTF/Npm+Repositories
  2. https://github.com/krakenjs/kappa
于 2014-05-28T17:13:41.530 回答
0

如果您更喜欢分散的方法,也可以使用 Aragon 包管理器:

  1. 使用 APM:http ://blog.aragon.one/using-apm-to-replace-npm-and-other-centralized-package-managers/
  2. 部署 APM:https ://github.com/aragon/aragonOS#apm
于 2019-02-10T08:07:14.673 回答