NPM在package.json中通过依赖项安装私有github存储库

我试图通过npm安装github私有存储库,包括其他私有github存储库作为依赖。

我尝试了很多方法和帖子,但没有一个是有效的。这是我正在做的:

npm install git+https://github.com/myusername/mygitrepository.git

在包中。Json是这样的:

"dependencies": {
"repository1name": "git+https://github.com/myusername/repository1.git",
"repository2name": "git+https://github.com/myusername/repository2.git"
}

正确的做法是什么?

295317 次浏览

试试这个:

"dependencies" : {
"name1" : "git://github.com/user/project.git#commit-ish",
"name2" : "git://github.com/user/project.git#commit-ish"
}

你也可以试试这个,其中visionmedia/express是name/repo:

"dependencies" : {
"express" : "visionmedia/express"
}

或者(如果npm包模块存在):

"dependencies" : {
"name": "*"
}

取自NPM文档

以下在我需要的所有场景下工作得很好:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:x-oauth-basic@github.com/<user>/<GitRepo>.git"
}

对于那些来这里获取公共目录的人,从npm文档:https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git url作为依赖项

Git url可以是这样的:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

commit-ish可以是任何标记、sha或分支,可以作为git签出的参数提供。默认为master。

正如人们指出的,有多种方法可以做到这一点,但最短的版本是:

// from master
"depName": "user/repo",


// specific branch
"depName": "user/repo#branch",


// specific commit
"depName": "user/repo#commit",


// private repo
"depName": "git+https://[TOKEN]:x-oauth-basic@github.com/user/repo.git"

如。

"dependencies" : {
"hexo-renderer-marked": "amejiarosario/dsa.jsd#book",
"hexo-renderer-marked": "amejiarosario/dsa.js#8ea61ce",
"hexo-renderer-marked": "amejiarosario/dsa.js",
}

接受的答案是有效的,但我不太喜欢将安全令牌粘贴到package.json的想法

我在其他地方找到了它,只需运行这个一次性命令如git-config手册中所述

git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf git@github.com:

GITHUB_TOKEN可以设置为environmentnet变量或直接粘贴

然后我安装私人github回购像:npm install user/repo --save


在Heroku中也可以工作,只需将上面的git config ...命令设置为heroku-prebuild脚本,并将GITHUB_TOKEN设置为Heroku配置变量。

对于我的私有存储库引用,我不想包括一个安全令牌,其他简单的(即仅在package.json中指定)都不起作用。以下是行之有效的方法:

  1. 去GitHub.com
  2. 导航到私有存储库
  3. 点击“克隆或下载”,复制URL(与上面的例子不匹配)
  4. 添加# commit-sha
  5. 运行npm install
"dependencies": {
"some-package": "github:github_username/some-package"
}

或者只是

"dependencies": {
"some-package": "github_username/some-package"
}

https://docs.npmjs.com/files/package.json#github-urls

因为Git在底层使用curl,所以你可以使用带有凭证的~/.netrc文件。对于GitHub,它看起来像这样:

machine github.com
login <github username>
password <password OR github access token>

如果你选择使用access tokens,它可以从:

>开发人员设置->个人访问令牌

如果你在自己的公司使用Github企业,这也应该有效。只要把你的企业github网址放在machine字段。

下面是一个更详细的版本,如何使用Github令牌而不发布在package.json文件中。

  1. 创建个人github访问令牌
  2. 在~/.gitconfig中重写安装url
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. 安装私有存储库。用于调试访问错误的详细日志级别。
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

如果访问Github失败,请尝试运行git ls-remote ...命令,以使npm install will print . exe无法访问Github

还有SSH密钥-仍然要求密码和密码短语

使用ssh-add ~/.ssh/id_rsa而不使用本地钥匙链。

这样就避免了与令牌纠缠不清。

进一步,为了使密钥的访问安全

  1. 在package. env所在的目录级别创建.env文件。json驻留。
  2. 提到PERSONAL_ACCESS_TOKEN =******************************* 到.env文件
  3. 别忘了加上‘。Env '到.gitingore列表,这将防止暴露密钥给外部世界,当你让git提交到你的回购。
  4. 现在您可以在包中添加依赖项。Json格式如下:

Package.json

< p >“dependencies": { ... “my-private-github-repo":“git + https:// $ {ENV.PERSONAL_ACCESS_TOKEN} @github.com/USER/abcd-repo-3.4.0.git" ... } < / p >

还有其他使用“DOTENV”npm包的方法,但当我们试图解决“github”时,它不能做太多。包的依赖。以上似乎是一个直截了当的解决方案。

如果您想添加既不锚定到master也不锚定到特定提交的依赖项,可以使用semver来完成。像这样:

"dependencies": {
"some-package": "github:github_username/some-package#semver:^1.0.0"
}

请注意,你试图作为依赖项添加到你的包的github回购。Json文件需要有自己的包。Json文件定义。