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

fut*_*lib 315 package node.js npm npm-private-modules

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

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

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

npm install --from-git git@server:project
Run Code Online (Sandbox Code Playgroud)

250*_*50R 510

在你的私人npm模块中添加

"private": true 
Run Code Online (Sandbox Code Playgroud)

到你的package.json

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

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你希望你的package.json维护私有repo依赖列表,这是你应该做的好东西(tm),这是真正的*正确答案. (57认同)
  • 请注意,"private":true`部分不是必需的,但它有助于防止您的私人仓库被意外地发布到公共npm注册表. (26认同)
  • 在示例中,它引用了一个特定的标记,但是如果你没有,那么它将默认为master.(见http://git-scm.com/book/en/Git-Basics-Tagging) (6认同)
  • 我不明白如果我没有使用我的凭据,这个命令行如何从私有github仓库下载代码!那我怎么能通过我的github凭证呢? (3认同)
  • npm也会查找几个环境变量。在[手册](https://docs.npmjs.com/cli/install)的“ npm install <git remote url>”部分中,有诸如“ GIT_ASKPASS”和“ GIT_SSH”之类的选项。除了默认id_rsa以外的其他密钥:`GIT_SSH_COMMAND ='ssh -i〜/ .ssh / custom_ident'npm install git + ssh://git@github.com:npm / npm.git` (2认同)

mih*_*hai 255

cd somedir
npm install .
Run Code Online (Sandbox Code Playgroud)

要么

npm install path/to/somedir
Run Code Online (Sandbox Code Playgroud)

somedirpackage.json里面必须包含它.

它也知道git:

npm install git://github.com/visionmedia/express.git
Run Code Online (Sandbox Code Playgroud)

  • 附注:(a)使用git repos时,可以通过在git url的末尾添加一个`#<ref>`来指定分支/提交/标记,例如`git://github.com/visionmedia/express git的#v0.0.1`; (b)为了安全,将"private":true`添加到私人回购的package.json中.这将确保npm永远不会让你不小心将你的秘密酱发布到官方的npm注册表.(根据http://debuggable.com/posts/private-npm-modules:4e68cc7d-1ac4-42d9-995a-343dcbdd56cb) (11认同)
  • 仅供参考,如果你通过http服务你的git你需要`npm i git + http:// all/the/things.git`即使`git clone http:// all/the/things.git`有效正好 (9认同)
  • path/to/somedir解决方案类型有效,但之后它很糟糕,因为所有require语句都必须包含相对或绝对路径.如果我做错了,请纠正我... (4认同)
  • @Luke是的,你错了.在"npm install"之后,所有文件都被复制到项目目录中.所以`require`语句中的路径只相对于你的项目目录. (3认同)
  • 我对顶部部分感到困惑,我自己没有测试过的唯一原因是我还在学习并且没有私有模块可以工作.无论如何,通过将您的目录更改为模块所在的位置,然后调用`install`不会只是安装在那里而不是您想要用于它的项目? (3认同)

Col*_*nic 61

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

是的你可以!来自docs https://docs.npmjs.com/cli/install

包裹是:

  • a)包含package.json文件描述的程序的文件夹
  • b)包含(a)的压缩的tarball
  • c)解析为(b)的网址
  • d)<name>@<version>与(c)一起在登记处公布的a
  • e)a <name>@<tag>指向(d)
  • f)<name>具有满足(e)的"最新"标签的a
  • g)<git remote url>解析为(b)

是不是很棒?

  • 请注意,如果您选择选项 b),它实际上必须是一个 _gzipped tarball_,仅 zip 存档不会这样做。也就是说,如果你使用 `tar -czf my-package.tar.gz dist` 创建你的包(假设你的 `dist` 文件夹中也有一个合适的 `package.json` 文件),那么你可以 `npm install ../来自其他项目的 my-lib/my-package.tar.gz`。 (2认同)

arc*_*don 47

2016年1月更新

除了其他答案之外,有时候您希望在团队环境中拥有私有模块.

无论Github上到位桶支持生成一个团队的概念API密钥.此API密钥可用作执行此团队的API请求的密码.

在你的私人npm模块中添加

"private": true 
Run Code Online (Sandbox Code Playgroud)

到你的package.json

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

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }
Run Code Online (Sandbox Code Playgroud)

其中team name = myteamname,API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

在这里我引用了一个bitbucket repo,但它几乎使用github相同.

最后,作为替代方案,如果您真的不介意每月支付7美元(截至撰写时),那么您现在可以开箱即用私有NPM模块.


Ben*_*esh 29

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

以下对我有用:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"
Run Code Online (Sandbox Code Playgroud)

例如:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"
Run Code Online (Sandbox Code Playgroud)

在这一个案例中,我不完全确定为什么其他答案对我不起作用,因为它们是我在点击谷歌并找到答案之前首先尝试的.其他答案就是我过去所做的.

希望这有助于其他人.

  • 你能使用git repo的子目录吗? (2认同)

bwe*_*t87 9

我遇到了同样的问题,经过一番搜索后,我找到了Reggie(https://github.com/mbrevoort/node-reggie).它看起来很稳固.它允许将NPM模块轻量级发布到私有服务器.不完美(安装时没有身份验证),它仍然非常年轻,但我在本地测试它,它似乎做它应该做的事情.

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

npm install -g reggie
reggie-server -d ~/.reggie
Run Code Online (Sandbox Code Playgroud)

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

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 
Run Code Online (Sandbox Code Playgroud)

最后,您可以通过直接npm install命令或者在package.json中使用该URL来安装来自reggie的软件包...就像这样

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0
Run Code Online (Sandbox Code Playgroud)

要么..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}
Run Code Online (Sandbox Code Playgroud)


wch*_*ard 7

以下面的可访问方式构建代码.如果这对您有用.

  • NodeProjs\APPS\MainApp \的package.json

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

在MainApp @ NodProjs\Apps\MainApp \中

npm install --S ../../Modules/DataModule
Run Code Online (Sandbox Code Playgroud)

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

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}
Run Code Online (Sandbox Code Playgroud)

这适用于我的情况.


roo*_*oo2 5

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

cd private-project
npm login
Run Code Online (Sandbox Code Playgroud)

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

npm publish
Run Code Online (Sandbox Code Playgroud)

然后要求您的项目:

cd ../new-project
npm install --save @username/private-project
Run Code Online (Sandbox Code Playgroud)


Isa*_*iah 5

就是我要找的

# 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
Run Code Online (Sandbox Code Playgroud)