您可以为组织托管私有存储库以与npm一起使用吗?


219

Npm听起来像是在组织内使用的绝佳平台,很好奇是否可以进行私人回购,例如Nexus / Maven。在Google上什么都没有:(


1
以下是非常整洁的文档,该如何操作:clock.co.uk/tech-blogs/how-to-to-create-a-private-npmjs-repository这与pvorb在他的回答中解释的相同。
ramesh.mimit

2
请注意,clock.co.uk后是一个完整的故宫注册表的副本。对于所需依赖项的本地缓存,我发现的最佳解决方案是npm_lazy我的叉子上的文档可能更容易理解。
杰克·伯杰

1
我知道我有点晚了讨论,但我只是想,我们最近增加私人NPM注册表支持添加到我们的(免费)产品ProGet
卡尔Harnagy

2
如下所述,Nexus现在支持托管和代理npm存储库。
扎克·汤普森

8
多年来,有许多可用的选择。任何回过头来的人都应该阅读所有答案,而不仅仅是我在2011
。–亚当

Answers:


100

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

看故宫文献告诉我们,这是可能的:

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

是!

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

如果您从官方CouchDB设置了连续复制,然后将内部CouchDB设置为注册表配置,则除了私有包之外,您还可以读取任何已发布的包,并且默认情况下仅在内部发布。然后,如果您想发布一个程序包供全世界查看,则可以简单地覆盖该--registry命令的配置。

关于如何在时钟博客中创建私有npm存储库,还有一本很棒的教程。

编辑(2017-02-26):

这不是一个真正的新事物,但是现在有付费计划在NPM上托管私有软件包。

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

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


201

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

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

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


3
这是一个很棒的功能,但是我接受了pvorb的功能,因为我在询问是否托管整个NPM回购,一个内部Maven回购
亚当(

2
注意:NPM当前不支持使用这些git URL(例如1.2.x或^ 1.2.3)指定版本范围。github.com/npm/npm/issues/3328
Clay

@Clay,您可以指定标签(v0.0.1),对吗?
mcha

是的,您可以做一个准确的标签。
粘土

有没有一种方法可以使用GitHub部署密钥对私有存储库进行身份验证?
sunknudsen

91

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

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

可以将Sinopia用于:

  • 发布自己的私有软件包,而不向公众公开
  • 仅缓存使用的公共程序包(无需复制整个公共注册表)
  • 使用内部产生的修改版本覆盖公共软件包。

13
似乎已不再维持新几内亚。截至今天(2016年3月7日),最近一次提交是在8个月前。它看起来不错并且运行良好,但是在可维护性方面要小心。
Ray Booysen '16

45
查看verdaccio。这是它的一个积极维护的分支:github.com/verdaccio/verdaccio
Rotareti 2016年

1
verdaccio是否支持“私有专用”配置,在该配置中不会查询任何公共注册表?
MarkusSchaber

1
@MarkusSchaber您可以禁用其他注册表的代理。即使代理尝试访问网络,它也可以处于脱机模式。
Juan Picado

1
我真的很想今天Verdaccio应该得到它自己的答案stackoverflow.com/a/50815174/336753我什至没有首先注意到这里的评论。
kub1x

40

Verdaccio是我一直在寻找的,应该得到它自己的答案;)这是一个积极维护的Sinopia分支(此处是强烈支持的答案)。它是一个npm注册表,是一个npm软件包,可以找到

此处:https : //github.com/verdaccio/verdaccio
此处:https : //www.verdaccio.org
此处:pnpm i -g verdaccio
此处:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio


2
这个!谢谢-> docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio / verdaccio
mwm

1
@mwm谢谢。将docker版本添加到列表中。
kub1x

28

在2015年4月14日,npm私有模块被引入。

在购买专用模块时,您可以:

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

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

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

当前,私有软件包仅适用于个人用户,但即将推出对组织帐户的支持。在此期间,可以随时为您的组织创建用户,如果有支持,我们可以将其升级到组织。

因此,虽然不完美,但这是维护私有软件包的官方 npm解决方案,这本身值得一提。

更新

Npm私有软件包现已推出,并针对个人用户和组织制定了计划:

  • 无限数量的公共和私人套餐
  • $ 7 /月/开发人员
  • 根据组织名称包含一个范围名称
  • 发布和控制对@ org-name / foo的访问

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



10

我猜这个线程需要更新。如果您查看任何可用的npm注册表,则它们非常繁重,因此需要beddb。Gemfurry和其他人需要您从公共存储库中拨出钱。一些npm就像shadow-npm 没有最近的提交

然后,我们找到了雷吉。它具有良好的提交活动,非常易于安装和使用,并且具有很好的社区支持。它非常轻巧,您无需处理ouchdb等。


9

如果我不太了解您的问题,请原谅我,但是这是我的答案:

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

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

    npm install * tarball_url *


5
您没有得到他的问题,但是答案对我来说非常有用!:)
Eduardo Costa

7

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

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


它不是免费的。
I.Tyger,

6

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

在此处输入图片说明


5

派对晚了一点,但是NodeJS(我猜是11月14日左右)支持公司NPM存储库-您可以在其官方网站上找到更多信息。

粗略地看一下,似乎npmE允许对NPM存储库进行透彻镜像-也就是说,如果在内部NPM存储库中找不到软件包,它将在实际 NPM存储库中查找软件包。似乎非常有用!

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

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

npmE是一个npm注册表,可与您已经使用的相同标准npm客户端一起使用,但提供了现在正在积极采用节点的大型组织所需的功能。它由npm,Inc.(npm开源项目的发起人和公共npm注册中心的主持人)构建。

不幸的是,它不是免费的。您可以试用,但它是商业软件。对于单独开发人员来说,这并不是什么好事,但是如果您是单独开发人员,则可以使用GitHub :-)


3

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

  • 确保您的系统中安装了ouchdb
  • 使用以下命令复制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 

1
不幸的是,URL isaacs.iriscouch.com/registry已经死了。我尝试将其更改为skimdb.npmjs.com/registry,该功能一开始似乎起作用,但它仅复制注册表索引,而不复制tarball ...
FuzzyTew18年

couchapp自述指出couchapp现在有点过时,但它也说,以反映整个注册表目前的方法是使用NPM-全脂的注册表
fuzzyTew

我最终为此使用了静态注册表,这与沙发床解决方案不同,它根本不需要任何配置。
FuzzyTew18年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.