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

我正在使用node.js编写一些代码片段(供内部使用),并且希望将这些模块(打包成npm)存储在包版本库中,以便将其发布到将要安装的各种机器上。

理想情况下,我想要一个类似于Debian apt库的解决scheme,在这个库中我可以运行一个私有版本库服务器,并configurationnpm来使用安装库列表(当安装“foo”时,如果我的私有服务器从那里安装它,否则从公共服务器安装它)。

但是,它看起来像npm registryconfiguration键只接受一个URL。

有没有办法实现我想要的?

我能find的最近的是:

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

我只是为了我的工作而设置这个。 以下是我所做的:

  1. 设置空的NPMregistry :我遵循了npmjs.org这个分支的指示,这增加了很多改进的文档 。

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

  3. 设置npm_lazy可选 ):在npmjs.org发生故障的情况下,我想要一个经常使用的软件包的caching,所以我在整个事物的前面添加了npm_lazy作为caching层。

整个事情花了两天(ish)起床和运行。 作为一个侧面说明,如果你担心人们不小心推到公共registry,我build议添加到你的package.json

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

这真的只是一个偏执狂; 一旦你设置你的npm指向你的Kappa / npm_lazy实例,Kappa就会把你的私有存储库发布给你。

注意:Kappa只会在它的configuration中发布到第一个仓库。 如果你需要发布给你的私人registry和公众,你将需要制定出自己的解决scheme。

在你的package.json中,你可以使用任何指向一个有效npm打包模块的URL。 我用了一个很难猜测的桶名。

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

S3只是一个例子,你可以使用任何可以在Web服务器上放置文件的意思,它甚至可以通过基本的身份validation来保护。

我相信贝宝的Kappa项目将适合您的需要。

这里有一篇文章描述贝宝的Kraken项目以及Kappa如何适应。

我知道在昆丁问题的时候这个问题是没有的,但也许这对其他人来说是有用的。

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

总的来说,在我看来,你可以通过searchhttps://github.com/npm所拥有的存储库中的问题或者在那里问你的问题来得到最好的答案

仅仅基于听最近一集的NodeUp (#37?),我想你可能想看看irisnpm 。 从我记得它是一个服务,它给你一个公共模块和你自己的私人模块合并。

正如Dominic Barnes所build议的那样,我们只能复制_design文档(CouchDB表格scheme)

如何仅复制devise文档?

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

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