如何在没有自己的registry的情况下安装私有的NPM模块?

我已经采取了一些共享的代码,并把它放在一个NPM模块,我不想上传到中央registry。 问题是,我如何从其他项目安装它?

显而易见的方法是build立我自己的NPMregistry,但根据文档,这涉及到很多麻烦。

我可以只安装一个位于本地文件系统的NPM模块,或者甚至可以使用git?

npm install --from-git git@server:project 
 cd somedir npm install . 

要么

 npm install path/to/somedir 

somedir必须在其中包含package.json

它也知道git:

 npm install git://github.com/visionmedia/express.git 

在你的私人npm模块中添加

 "private": true 

到你的package.json

然后引用另一个模块中的私有模块,在你的package.json中使用它

 { "name": "myapp", "dependencies": { "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0", } } 

我可以只安装一个位于本地文件系统的NPM包,或者甚至可以从git中安装吗?

是的你可以! 从文档https://docs.npmjs.com/cli/install

一个包是:

  • a)包含由package.json文件描述的程序的文件夹
  • b)gzipped压缩包含(a)
  • c)parsing为(b)
  • d)与registry(c)一起发布的<name>@<version>
  • e)指向(d)的<name>@<tag>
  • f)具有“最新”标签的<name>满足(e)
  • g)parsing为(b)的<git remote url>

不是NPM的辉煌?

2016年1月更新

除了其他答案之外 ,有时候也希望在团队环境中有专用模块。

GithubBitbucket都支持生成团队API密钥的概念。 此API密钥可以用作密码来执行此团队的API请求。

在你的私人npm模块中添加

 "private": true 

到你的package.json

然后引用另一个模块中的私有模块,在你的package.json中使用它

  { "name": "myapp", "dependencies": { "private-repo": "git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git", } } 

其中团队名称= myteamnameAPI密钥= aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

在这里我引用了一个bitbucket回购,但是它也使用github几乎相同。

最后,作为一种select,如果您真的不介意每月支付7美元 (截止撰写),那么您现在可以拥有私人的NPM模块 。

FWIW:在处理私人组织存储库时,我遇到了所有这些问题。

以下为我工作:

 npm install -S "git+https://username@github.com/orgname/repositoryname.git" 

例如:

 npm install -S "git+https://blesh@github.com/netflix/private-repository.git" 

我不完全确定为什么其他答案在这种情况下对我不起作用,因为他们是我在Google上find答案之前先尝试的。 其他答案是我过去所做的。

希望这可以帮助别人。

我也有同样的问题,经过一番search后,我发现雷吉( https://github.com/mbrevoort/node-reggie )。 它看起来很稳固。 它允许将NPM模块轻量发布到专用服务器。 不完美(安装时没有authentication),它还是非常年轻,但我在本地进行了testing,它似乎做了它应该做的事情。

这是…(这只是从他们的文档)

 npm install -g reggie reggie-server -d ~/.reggie 

然后cd到你的模块目录和…

 reggie -u http://<host:port> publish reggie -u http://127.0.0.1:8080 publish 

最后,你可以从reggie安装软件包,只需要在直接的npm install命令中使用该url,或者从package.json中使用这个url …就像这样

 npm install http://<host:port>/package/<name>/<version> npm install http://<host:port>/package/foo/1.0.0 

要么..

 dependencies: { "foo": "http://<host:port>/package/foo/1.0.0" } 

像下面这样以可访问的方式构build您的代码。 如果这对你是可能的。

  • NodeProjs \ APPS \ MainApp \的package.json

  • NodeProjs \模块\ DataModule的\的package.json

在MainApp @ NodProjs \ Apps \ MainApp \

 npm install --S ../../Modules/DataModule 

您可能需要将package.json更新为:

  "dependencies": { "datamodule": "../../Modules/DataModule" } 

这适用于我的情况。

从arcseldon的回答开始 ,我发现在URL中需要团队名称,如下所示:

 npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git" 

请注意,API密钥仅适用于团队,而不是个人用户。

Npm现在提供无限的私人托pipe模块 ,用于像这样使用7美元/用户/月

 cd private-project npm login 

在你的包json中设置"name": " @username/private-project"

 npm publish 

然后要求你的项目:

 cd ../new-project npm install --save @username/private-project 

即使机器处于防火墙下,也要从公共Github存储库进行安装:

 dependencies: { "foo": "https://github.com/package/foo/tarball/master" } 

我用一个私人的github仓库使用以下内容:

 npm install github:mygithubuser/myproject 

很简单 –

 npm config set registry https://path-to-your-registry/ 

它实际上将registry = "https://path-to-your-registry"此行设置为/Users/<ur-machine-user-name>/.npmrc

所有你明确设置或默认设置的值都可以通过npm config list来看到