如何在没有自己的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月更新
除了其他答案之外 ,有时候也希望在团队环境中有专用模块。
Github和Bitbucket都支持生成团队API密钥的概念。 此API密钥可以用作密码来执行此团队的API请求。
在你的私人npm模块中添加
"private": true
到你的package.json
然后引用另一个模块中的私有模块,在你的package.json中使用它
{ "name": "myapp", "dependencies": { "private-repo": "git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git", } }
其中团队名称= myteamname , API密钥= 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
来看到