我可以在不复制公共存储库的情况下运行私有的npm存储库吗?
我正在使用node.js编写一些代码片段(供内部使用),并且希望将这些模块(打包成npm)存储在包版本库中,以便将其发布到将要安装的各种机器上。
理想情况下,我想要一个类似于Debian apt库的解决scheme,在这个库中我可以运行一个私有版本库服务器,并configurationnpm来使用安装库列表(当安装“foo”时,如果我的私有服务器从那里安装它,否则从公共服务器安装它)。
但是,它看起来像npm registry
configuration键只接受一个URL。
有没有办法实现我想要的?
我能find的最近的是:
- 在本地镜像公共存储库并在其上添加我的软件包…但是我不想保留在AWS上复制的大量数据(2.5G并仍在下载)。
- 将我所有的软件包托pipe在git仓库中并从那里安装(这更麻烦)。
- 在HTTP上驻留静态包(据我所知,这将阻止我自动获取“最新版本”)。我想我可以做一些符号链接,但这还不如git灵活,需要完整的URL(需要以保持最新),并且不提供可search的存储库。
我只是为了我的工作而设置这个。 以下是我所做的:
-
设置空的NPMregistry :我遵循了npmjs.org这个分支的指示,这增加了很多改进的文档 。
-
设置Kappa :我使用了Paypal的一个很棒的npm代理Kappa 。 (我猜他们有一个非常相似的用例,大多数人谁想要一个私人存储库,这正是我想要的)。
-
设置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自己的存储库镜像的几种方法。 即:
- https://github.com/cnpm/cnpmjs.org
- https://github.com/rlidwka/sinopia
- https://github.com/davglass/registry-static
总的来说,在我看来,你可以通过searchhttps://github.com/npm所拥有的存储库中的问题或者在那里问你的问题来得到最好的答案
仅仅基于听最近一集的NodeUp (#37?),我想你可能想看看irisnpm 。 从我记得它是一个服务,它给你一个公共模块和你自己的私人模块合并。
正如Dominic Barnes所build议的那样,我们只能复制_design
文档(CouchDB表格scheme)
如何仅复制devise文档?
但是,它需要检查是否需要一些数据。
您可以复制所需的模块,然后编写代理服务器,在复制中查找模块。 如果一个模块不存在,它可以将请求传送给NPM并从那里返回结果。