262

我正在尝试通过 npm 安装 github 私有存储库,其中包括其他私有 github 存储库作为依赖项。

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

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

在 package.json 中是这样的:

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

正确的方法是什么?

4

13 回答 13

170

尝试这个:

"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 文档

于 2014-04-22T04:50:48.310 回答
118

以下在我需要的所有情况下都可以正常工作:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:x-oauth-basic@github.com/<user>/<GitRepo>.git"
}
于 2014-10-25T09:27:05.197 回答
98

对于那些来这里获取公共目录的人,来自 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 可以是任何可以作为参数提供给 git checkout 的标记、sha 或分支。默认是主。

于 2016-03-09T13:15:05.797 回答
79

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

我在其他地方找到了它,只需按照 git-config 手册页中的说明运行这个一次性命令。

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

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

然后我安装私有 github 存储库,例如:npm install user/repo --save


也可以在 Heroku 中使用,只需将上述git config ...命令设置为heroku-prebuild脚本package.json并设置GITHUB_TOKEN为 Heroku 配置变量。

于 2016-10-28T19:30:53.360 回答
63

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

// 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",
}
于 2016-08-02T22:52:16.203 回答
31
"dependencies": {
  "some-package": "github:github_username/some-package"
}

要不就

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

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

于 2017-07-31T17:10:40.173 回答
12

由于 Gitcurl在后台使用,您可以使用~/.netrc带有凭据的文件。对于 GitHub,它看起来像这样:

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

如果您选择使用access tokens,它可以从以下位置生成:

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

如果您在自己的公司中使用 Github Enterprise,这也应该有效。只需将您的企业 github url 放在该machine字段中即可。

于 2018-04-10T15:35:01.493 回答
6

这是一个更详细的版本,说明如何在不发布package.json文件的情况下使用 Github 令牌。

  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

于 2019-05-23T12:09:14.840 回答
1

此外,为了使密钥的访问安全

  1. 在 package.json 所在的同一目录级别创建 .env 文件。
  2. 在 .env 文件中提及 PERSONAL_ACCESS_TOKEN=*************************************
  3. 不要忘记将 '.env' 添加到 .gitingore 列表中,这将防止在您将 git 提交到您的 repo 时将密钥暴露给外界。
  4. 现在您可以在 package.json 中添加您的依赖项,如下所示,

包.json

“依赖项”:{ ... “我的私有 github-repo”:“git+https://${ENV.PERSONAL_ACCESS_TOKEN}@github.com/USER/abcd-repo-3.4.0.git”,。 .. }

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

于 2021-05-18T16:55:49.307 回答
1

还有SSH 密钥 - 仍然要求输入密码和密码

ssh-add ~/.ssh/id_rsa在没有本地钥匙串的情况下使用。

这避免了必须弄乱令牌。

于 2020-01-16T15:45:08.840 回答
0

对于我的私有存储库参考,我不想包含安全令牌,并且其他简单的(即仅在 package.json 中指定)都不起作用。这是有效的:

  1. 去了 GitHub.com
  2. 导航到私有存储库
  3. 单击“克隆或下载”并复制 URL(与上面的示例不匹配)
  4. 添加了#commit-sha
  5. 跑 npm install
于 2017-06-27T23:17:24.627 回答
0

请注意,您尝试作为依赖项添加到 package.json 文件的 github 存储库需要定义自己的 package.json 文件。

于 2022-02-02T17:13:57.787 回答
0

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

"dependencies": {
  "some-package": "github:github_username/some-package#semver:^1.0.0"
}
于 2021-11-05T11:36:25.047 回答