我已经使用了一些共享代码并将其放在NPM模块中,我不想将其上传到中央注册表。问题是,如何从其他项目中安装它?

显而易见的方法可能是设置自己的NPM注册表,但是根据文档,这涉及很多麻烦。 >
我是否可以仅安装一个位于本地文件系统上的NPM模块,甚至可以从git安装它?

npm install --from-git git@server:project


#1 楼

cd somedir
npm install .




npm install path/to/somedir


somedir必须在其中包含package.json

它也了解git:

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


评论


path / to / somedir解决方案可以工作,但是那样很糟糕,因为所有的require语句都必须包含相对或绝对路径。如果我做错了事请纠正我...

–卢克·贝叶斯(Luke Bayes)
2012-10-25 3:40

@Luke是的,你错了。 npm安装后,所有文件都将复制到您的项目目录中。因此,require语句中的路径将仅相对于您的项目目录。

– mihai
2012年10月25日7:52

我对顶部感到困惑,而我自己没有对此进行测试的唯一原因是我还在学习并且没有私有模块可以工作。无论如何,通过将目录更改为模块所在的位置,然后调用install,就不是仅将其安装在那里,也不是要用于要使用它的项目吗?

–亚当·贝克(Adam Beck)
13年1月28日在4:48

旁注:(a)使用git repos时,可以通过在git url的末尾添加#来指定分支/提交/标签,例如git://github.com/visionmedia/express.git# v0.0.1; (b)为安全起见,在您的私有存储库的package.json中添加“ private”:true。这将确保npm永远不会让您不小心将秘密信息发布到npm官方注册表。 (根据debuggable.com/posts/…)

–拉斐尔·泽维尔(Rafael Xavier)
2013年3月26日19:32



仅供参考,如果您通过http服务您的git,则即使git clone http://all/the/things.git正常工作,您也需要git + http://all/the/things.git

–slf
13年5月30日在19:09

#2 楼

在您的私有npm模块中,将

"private": true 


添加到package.json

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

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


评论


如果您希望package.json维护私有存储库依赖项列表,这是真正的正确答案,这是您应该做的一件好事(tm)。

–user1207456
13年4月24日在22:44

在示例中,它引用的是特定标签,但是如果您没有标签,则默认为master。 (请参见git-scm.com/book/en/Git-Basics-Tagging)

– 250R
13年8月15日在0:17

如果我不使用我的凭据,我不明白此命令行如何从私有github存储库下载代码!那么我怎样才能通过我的github凭证呢?

– Renato Gama
2013年12月9日19:57

请注意,“ private”:真实部分不是必需的,但这将有助于防止将您的私有回购意外地发布到公共npm注册表中。

–福音医学
2014-09-10 18:14

npm也会查找几个环境变量。在npm install 部分的手册中,有类似GIT_ASKPASS和GIT_SSH的选项。选择默认ID_rsa以外的密钥的示例用法:GIT_SSH_COMMAND ='ssh -i〜/ .ssh / custom_ident'npm install git + ssh://git@github.com:npm / npm.git

–茉莉·黑格曼(Jasmine Hegman)
2015年10月19日,下午3:32

#3 楼


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


是的,可以!从docs https://docs.npmjs.com/cli/install


包为:


a)包含以下内容的文件夹package.json文件描述的程序
b)包含(a)
的压缩压缩包,c)解析为(b)
的url d)在注册表中发布的<name>@<version> (c)
e)指向(d)的<name>@<tag>,f)具有满足(e)
最新标签的<name>,g)解析为(b)的<git remote url>



npm并不出色吗?

评论


请注意,如果您选择选项b),则实际上它必须是gzip压缩的tarball,仅使用zip压缩文件就不会这样做。即如果您使用tar -czf my-package.tar.gz dist创建软件包(假设dist文件夹中也包含正确的package.json文件),则可以npm install ../my-lib/my-package。您其他项目中的tar.gz。

–Daniel Kis-Nagy
18-09-17在11:56

#4 楼

2016年1月更新

除了其他答案外,有时您还会希望在团队环境中使用私有模块。

Github和Bitbucket都支持生成团队API密钥的概念。此API密钥可用作此团队执行API请求的密码。

在您的私有npm模块中,将

"private": true 


添加到您的package.json

然后在另一个模块中引用私有模块,请在您的package.json中使用它。团队名称= myteamname ,并且API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

这里我引用了一个位桶存储库,但是使用github也几乎相同。

最后,作为替代,如果您真的不这样做只需每月支付$ 7(在撰写本文时),您便可以立即使用私有NPM模块。

评论


如果要拥有全局模块,可以使用它吗?

– PI。
16年1月13日在10:31



恐怕这对我不起作用。找不到远程库和资源库。有任何想法吗?

–托马斯·博曼斯(Thomas Bormans)
16年3月3日在15:50

@ThomasBormans-仍然有麻烦吗?请按照上述说明将您的行内容粘贴(加扰您的团队名称/ api密钥)到您的package.json的依赖项部分中。我发现这对github和bitbucket私人仓库都很有效。您正在使用哪个?

–arcseldon
16年3月3日在17:50

@arcseldon“ name”:“ git + key:x-oauth-basic@bitbucket.org/user/repo.git”返回EISDIR:对目录的非法操作,已读取。而“名称”:“ git + user:key@bitbucket.org/repo.git”会返回几个错误,包括以下单词:remote:未找到,致命:存储库,命令失败:git clone。有任何想法吗?

–托马斯·博曼斯(Thomas Bormans)
16年3月3日在17:59

尝试遵循我在答案中给出的“精确”格式:“ git + https:// @ bitbucket.org / .git您如何生成API密钥?您是否仔细检查过?这在您的bitbucket设置中是正确的...很抱歉,我想问一下这个问题,但是我有100%的信心可以解决这个问题。

–arcseldon
16年2月3日在18:09

#5 楼

FWIW:在处理私有组织存储库时,我对所有这些答案都有疑问。

以下对我有用:

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


对于示例:

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


我不确定在这种情况下为什么其他答案对我不起作用,因为它们是我在尝试之前首先尝试的方法打谷歌,找到了答案。而其他答案就是我过去所做的。

希望这对其他人有帮助。

评论


您可以使用git repo的子文件夹吗?

–克里斯
2014年10月10日在18:28

在2019年为我工作!但是我必须确保git具有访问该帐户的凭据。 (例如,使用https://两次测试git clone,并确保在第二次运行时不需要密码。然后,您就可以使用了!)

– joeytwiddle
19年1月28日在5:23



#6 楼

我遇到了同样的问题,经过一番搜索后,我发现了雷吉(https://github.com/mbrevoort/node-reggie)。看起来很扎实。它允许将NPM模块轻量发布到专用服务器。还不是很完美(安装时不进行身份验证),它还真的很年轻,但是我在本地进行了测试,它似乎按照其应有的方式工作。

这就是...(这只是他们的文档中的内容)

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命令中或在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"
}


#7 楼

以如下所示的可访问方式构造代码。如果您可以这样做。

NodeProjs \ Apps \ MainApp \ package.json


NodeProjs \ Modules \ DataModule \ package.json



在MainApp中@ NodProjs \ Apps \ MainApp \
npm install --S ../../Modules/DataModule

您可能需要将package.json更新为:
 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

这适合我的情况。

#8 楼

Npm现在提供无限的私人托管模块,每个用户每月$ 7,像这样使用

cd private-project
npm login


json套装中的"name": " @username/private-project"

npm publish


然后需要您的项目:

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


评论


这是否需要客户端登录步骤?

–艾丹·霍拉坎(Aidan Hoolachan)
17年12月16日在2:22

有什么替代方法吗?例如,如果要在S3上托管“包”并从那里拉取。

– Con Antonakos
18年11月27日在22:19

#9 楼

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

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


请注意,API密钥仅对团队可用,而对个人用户。

#10 楼

这就是我要找的东西:

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git#master
$ npm install git+ssh://git@github.com/username/my-new-project.git#master

# … or from Bitbucket, public repo:
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git#master
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev


#11 楼

即使机器位于防火墙下,也可以配置从公共Github存储库安装:

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


#12 楼

我将以下内容与私有github存储库一起使用:

npm install github:mygithubuser/myproject


#13 楼

非常简单-

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


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

您已经明确设置或默认设置的所有值都可以被-npm config list看到

#14 楼

为此,您可以使用Verdaccio,它是Node.js中内置的轻量级私有npm代理注册表。它也是免费和开源的。通过使用Verdaccio,它不会像普通的npm私人注册表那样麻烦很多。

您可以在其网站上找到有关如何安装和运行它的详细信息,但请按照以下步骤操作:

它需要node >=8.x

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873


它也有一个docker,因此您可以轻松地将其发布到您的公共docker和voila,您有一个私有的npm存储库可以按照您配置的方式分发给其他人!