如何安装一个私有的NPM模块没有我自己的注册表?

我把一些共享代码放到一个NPM模块中,一个我不想上传到中央注册中心的模块。问题是,如何从其他项目安装它?

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

我是否可以在本地文件系统上安装一个NPM模块,或者甚至从git中安装?

npm install --from-git git@server:project
239626 次浏览
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)包含由包描述的程序的文件夹。json文件
  • B)一个压缩压缩的tarball,包含(a)
  • C)解析为(b)
  • d)与(c)一起发布在注册表上的<name>@<version>
  • e)指向(d)的<name>@<tag>
  • f) <name>具有满足(e)的"latest"标签
  • g)解析为(b)的<git remote url>

npm是不是很棒?

我也有同样的问题,在四处寻找之后,我找到了雷吉(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

最后,你可以直接在NPM install命令中使用该url从reggie安装包,也可以在package.json中安装包。像这样

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

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

下面的方法对我很有效:

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

例如:

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

我不完全确定为什么其他答案在这种情况下对我不起作用,因为它们是我在点击谷歌并找到这个答案之前尝试的第一个。其他答案都是我过去做过的。

希望这能帮助到其他人。

配置从公共Github存储库安装,即使机器在防火墙下:

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

Npm现在以7美元/用户/月的价格提供无限的私有托管模块

cd private-project
npm login

在你的包json set "name": " @username/private-project"

npm publish

然后要求你的项目:

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

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

where 团队名称= myteamnameAPI Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

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

最后,作为另一种选择,如果你真的不介意支付每月$7(在写作时),那么你现在可以开箱即用私有NPM模块

arcseldon的回答开始,我发现在URL中需要球队名,就像这样:

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

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

以一种可访问的方式构建代码,如下所示。如果可以的话。

  • < p > NodeProjs \ app \ MainApp \ package.json

  • < p > NodeProjs \ \ DataModule \ package.json模块

在MainApp @ NodProjs \ MainApp \ \应用

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

您可能需要更新软件包。json:

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

这对我的情况很有效。

我使用以下与私人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查看

这是我一直在找的东西 -得到最新的“私人回购”;:

GitHub:

$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git
$ npm install git+ssh://git@github.com/username/my-new-project.git

Bitbucket都:

$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git

你可以使用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上,瞧,你有了一个私人的npm存储库,可以在你配置它的时候分发给其他人!

显然,建立私有的npm注册表是最具扩展性和最长远的解决方案,尽管一开始有点麻烦。

同样,你也可以使用其他答案中提到的git+https/ssh进行安装。但如果你有私有回购,你在云中构建映像,比如使用谷歌云构建,你必须建立GitHub ssh连接。

对于这种一次性情况,最简单的解决方案可以使用以下方法解决。

  • 从头开始克隆和修改或创建自己的库。

  • 生成存档文件(包代码及其依赖项),使用

    yarn install && yarn pack

    这将产生类似的文件

    rich-markdown-editor-v11.13.117.tgz

  • 将此文件移动到libs文件夹,并在package.json的依赖项对象中添加此条目。

    "rich-markdown-editor": "file:libs/rich-markdown-editor-v11.13.117.tgz",
    
  • 现在,安装包。

    yarn install
    
  • 确保将该文件添加到vcs中,docker镜像创建中的安装过程也应该在云中工作。

注意:如果你频繁地更新包并在vc中提交,它会增加你的回购大小(同时克隆完整的历史)。

  • 在组织名称下发布模块,使用标准的“@my-org/my-module"(默认情况下,所有组织模块都是私有的)。
  • 从你的npm配置文件中创建一个只读访问令牌,在“access token "
  • 接下来在你的项目根目录下创建一个.npmrc文件,并在文件中写入以下内容:
//registry.npmjs.org/:_authToken=${Your_Access_Token}

注意:这也适用于遵循相同标准的其他打包服务。