我正在使用node.js编写许多代码(供内部使用),并希望将模块(打包为npm)存储在软件包存储库中,以便将每个分发存储到它们将安装在的各种机器上。
理想情况下,我想要一个类似于Debian的apt存储库的解决方案,我可以在其中运行私有存储库服务器并配置npm以使用要安装的存储库列表(当安装“foo”时,如果知道“foo”由我的私人服务器从那里安装,否则从公共服务器安装。)
但是,看起来npm registry
配置密钥只接受一个URL。
有没有办法达到我想要的目的?
我能找到的最接近的是:
答案 0 :(得分:31)
我只是为我的工作做好准备。这是我做的:
设置空NPM注册表:我按照此npmjs.org分支的说明进行操作,这增加了很多improved documentation。
设置Kappa :我使用了Kappa,一个来自Paypal的优秀npm代理。 (我猜他们对大多数想要私有存储库的人有一个非常相似的用例;这正是我想要的。)
设置npm_lazy (可选):如果npmjs.org发生故障,我想要一个常用软件包的漂亮缓存,所以我添加了{{3}在整个事物的前面,作为一个缓存层。
整件事花了两天时间(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)
答案 5 :(得分:0)
正如Dominic Barnes所说,我们只能复制_design
个文件(CouchDB表方案)
How to replicate design documents only?
但是,它需要检查是否需要一些数据。
答案 6 :(得分:0)
您可以复制所需的模块,然后编写代理服务器,在复制中查找模块。如果模块不存在,它可以将请求传递给NPM并从那里返回结果。