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

Que*_*tin 34 package-managers package node.js npm

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

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

但是,看起来npm registry配置键只接受一个URL.

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

我能找到的最接近的是:

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

Chr*_*ase 32

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

  1. 设置空的NPM注册表:我按照npmjs.org的这个分支的说明,这增加了很多改进的文档.

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

  3. 设置npm_lazy(可选):我想要一个很好的缓存经常使用的包,以防npmjs.org失败,所以我在整个事物的前面添加了npm_lazy作为缓存层.

整件事花了两天时间(ish)起床和跑步.作为旁注,如果您担心人们意外地进入公共注册表,我建议您将其添加到package.json:

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

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

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


Pas*_*cle 6

在package.json中,您可以使用指向有效npm压缩模块的任何URL.我使用的s3的桶名很难猜到.

npm pack
s3cmd put *.tgz s3://path-to-your bucket
Run Code Online (Sandbox Code Playgroud)

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