如何在没有我自己的注册表的情况下安装私有NPM模块?


329

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

最明显的方法可能是设置我自己的NPM注册表,但是根据文档,这涉及很多麻烦。

我是否可以仅安装一个位于本地文件系统上的NPM模块,甚至可以从git安装它?

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

Answers:


262
cd somedir
npm install .

要么

npm install path/to/somedir

somedir必须包含其中的package.json内容。

它也了解git:

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

4
path / to / somedir解决方案可以工作,但是那样有点糟糕,因为所有的require语句都必须包含相对或绝对路径。如果我做错了什么,请纠正我……
路加斯·贝叶斯

3
@Luke是的,你错了。将npm install所有文件复制到您的项目目录之后。因此,require语句中的路径将仅相对于您的项目目录。
mihai 2012年

4
我对顶部感到困惑,而我自己没有对此进行测试的唯一原因是我仍在学习并且没有私有模块可以工作。无论如何,通过将目录更改为模块所在的位置,然后调用该方法,install就不会只是将其安装在该模块上,而不是将其安装在您要使用该模块的项目上吗?
亚当·贝克

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

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

527

在您的私人npm模块中添加

"private": true 

到您的package.json

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

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

59
这是真实的,如果你想你的package.json保持私人回购依赖列表,这是件好事(TM),你应该做的正确的答案。

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

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

28
请注意,该"private": true部分不是必需的,但这将有助于防止您的私人回购被意外地发布到公共npm注册表。
evanrmurphy

2
npm也会查找几个环境变量。从本手册中的npm install <git remote url>部分,也有类似的选项GIT_ASKPASSGIT_SSH.An例如使用选择比默认id_rsa之外的键:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
茉莉花海格曼

62

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

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

一个包是:

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

npm不是很出色吗?


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

48

2016年1月更新

除了其他答案外,有时还需要在团队环境中使用私有模块。

无论Github上到位桶支持生成一个团队的概念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也几乎相同。

最后,作为替代方案,如果您真的不介意每月支付7美元(在撰写本文时),那么现在可以使用私有NPM模块了。


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

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

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

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

尝试遵循我在答案中给出的“精确”格式:“ git + https:// <myteamname>:<my_key> @ bitbucket.org / <my_repo_name> .git您如何生成API密钥?您是否仔细检查过?在您的bitbucket设置中是正确的...很抱歉问这个明显的问题,但是我几乎有100%的信心应该可以使用
arcseldon 2016年

30

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并找到答案之前首先尝试的方法。其他答案是我过去所做的。

希望这可以帮助其他人。


2
您可以使用git repo的子文件夹吗?
克里斯

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

9

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

那就是...(这只是他们的文档)

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

然后进入您的模块目录并...

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

最后,您可以通过直接在npm install命令中使用该url或在package.json中使用reggie来从reggie安装软件包。

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"
}

这适合我的情况。


5

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

cd private-project
npm login

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

npm publish

然后要求您的项目:

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

1
这是否需要客户端登录步骤?
艾丹·胡拉坎

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

4

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

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

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



2

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

npm install github:mygithubuser/myproject

2

就是我想要的

# 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

2

您可以使用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

它还有一个泊坞窗,因此您可以轻松地将其发布到您的公共泊坞窗,瞧,您有一个私有的npm存储库,可以通过配置它的方式分发给其他人!


0

很简单 -

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

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

您可以通过-看到您已显式设置或默认设置的所有值。 npm config list

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.