我可以在不复制公共存储库的情况下运行私有npm存储库吗?

时间:2013-01-30 16:42:01

标签: node.js package npm package-managers

我正在使用node.js编写许多代码(供内部使用),并希望将模块(打包为npm)存储在软件包存储库中,以便将每个分发存储到它们将安装在的各种机器上。

理想情况下,我想要一个类似于Debian的apt存储库的解决方案,我可以在其中运行私有存储库服务器并配置npm以使用要安装的存储库列表(当安装“foo”时,如果知道“foo”由我的私人服务器从那里安装,否则从公共服务器安装。)

但是,看起来npm registry配置密钥只接受一个URL。

有没有办法达到我想要的目的?

我能找到的最接近的是:

  • 在本地镜像公共存储库并在其上添加我的软件包......但我不想在AWS上复制那些数据量(2.5G并仍在下载)。
  • 将我的所有软件包托管在git存储库中并从那里安装(这更麻烦)。
  • 在HTTP上托管静态包(据我所知,这会阻止我自动获取“最新版本”。我想我可以使用符号链接做一些事情,但这仍然不如git灵活,需要完整的URL (需要保持最新),并且不提供可搜索的存储库。

7 个答案:

答案 0 :(得分:31)

我只是为我的工作做好准备。这是我做的:

  1. 设置空NPM注册表:我按照此npmjs.org分支的说明进行操作,这增加了很多improved documentation

  2. 设置Kappa :我使用了Kappa,一个来自Paypal的优秀npm代理。 (我猜他们对大多数想要私有存储库的人有一个非常相似的用例;这正是我想要的。)

  3. 设置npm_lazy 可选):如果npmjs.org发生故障,我想要一个常用软件包的漂亮缓存,所以我添加了{{3}在整个事物的前面,作为一个缓存层。

  4. 整件事花了两天时间(ish)起床和跑步。作为旁注,如果您担心人们偶然进入公共注册管理机构,我建议您将其添加到package.json

    "publishConfig": { "registry": "http://my-registry.example.com" },

    这真的只是一点偏执狂;一旦你设置你的npm指向你的Kappa / npm_lazy实例,Kappa就会为你处理你的私人存储库的发布。

    注意:Kappa只会在其配置中发布到第一个存储库。如果您需要发布到您的私人注册表和公众,您需要制定自己的解决方案。

答案 1 :(得分:6)

在package.json中,您可以使用任何指向有效npm压缩模块的URL。我使用的是一个难以猜测的存储桶名称的s3。

npm pack
s3cmd put *.tgz s3://path-to-your bucket

S3只是一个例子,您可以使用任何可以将文件放在Web服务器上的方法,它甚至可以通过基本身份验证进行保护。

答案 2 :(得分:3)

我相信Paypal的Kappa项目符合您的需求。

Here is an article描述了Paypal的Kraken项目以及Kappa如何适应。

据我所知,在Quentin的问题上没有它,但也许这对其他人来说很有用。

答案 3 :(得分:3)

npm-registry-client GitHub问题#42列出了如何创建自己的存储库镜像的几种方法。即:

总的来说,在我看来,您可以通过搜索https://github.com/npm所拥有的存储库中的问题或在那里提出您的问题来获得最佳答案

答案 4 :(得分:1)

仅基于最近一集NodeUp(#37?),我想你可能想看一下irisnpm。从我记忆中来看,这是一项服务,它为您提供了一组合并的公共模块和您自己的私有模块。

答案 5 :(得分:0)

正如Dominic Barnes所说,我们只能复制_design个文件(CouchDB表方案)

How to replicate design documents only?

但是,它需要检查是否需要一些数据。

答案 6 :(得分:0)

您可以复制所需的模块,然后编写代理服务器,在复制中查找模块。如果模块不存在,它可以将请求传递给NPM并从那里返回结果。