npm installe les référentiels github privés par dépendance dans package.json


211

J'essaie d'installer le référentiel privé github par npm qui inclut d'autres référentiels github privés comme dépendance.

J'ai essayé beaucoup de moyens et de messages, mais aucun ne fonctionne. Voici ce que je fais:

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

dans package.json est comme:

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

Quelle est la bonne façon de procéder?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <user> / <GitRepo> .git Il prend en charge l'authentification et fonctionne correctement dans tous les cas.
vashishatashu

Réponses:


147

Essaye ça:

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

Vous pouvez également essayer ceci, où visionmedia / express est nom / repo:

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

Ou (si le module de package npm existe):

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

Extrait des documents NPM


1
npm ERR! Échec de la résolution de git HEAD ( github.com/user/reponame.git ) fatal: argument ambigu 'commit-ish': révision inconnue ou chemin d'accès absent de l'arborescence de travail.
vashishatashu

Ça ne marche pas. le #xxxx n'est pas requis comme s'il n'était pas considéré comme maître et tout mon travail est en maître. Une autre idée?
vashishatashu

Même résultat si vous supprimez l'en-tête (# commit-ish)?
leko

Quel est le nom de votre référentiel?
leko

28
@vashishatashu, concernant fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.Assez évident, ce commit-ishn'est qu'un exemple de mot que vous devez remplacer par un shacommit spécifique dont vous avez besoin. (ou supprimez-le #commit-ishdu tout si vous avez besoin du dernier commit dans votre branche master)
meandre

92

Les éléments suivants ont très bien fonctionné dans tous les scénarios dont j'avais besoin:

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

2
Avez-vous un lien de référence pour cette solution?
Ian

3
@Ian: Je l'ai lu quelque part mais je n'ai pas de lien de référence. Je l'utilise en production depuis plus d'un an sans aucun problème. Vous pouvez obtenir un jeton Oauth de Github sous: Paramètres -> Applications -> Jeton d'accès personnel -> Générer un nouveau jeton. Ce jeton peut avoir des privilèges de lecture / écriture ou les deux selon votre cas d'utilisation.
vashishatashu

6
@lan: pour bitbucket, vous pouvez utiliser la syntaxe suivante: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can être obtenu auprès de: Équipe -> Gérer l'équipe -> Clé API
vashishatashu

@vashishatashu, merci pour une excellente idée. Cependant, j'obtiens "fatal: blahblah not found" en essayant ceci, même si j'ai accordé l'accès au référentiel à l'utilisateur en question. Des idées?
Per Lundberg

2
Voici un bel article sur cette technique: rzrsharp.net/2013/07/02/…
cyberwombat

76

Pour ceux d'entre vous qui sont venus ici pour les répertoires publics, à partir des documents npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

URL Git comme dépendances

Les URL Git peuvent être de la forme:

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

Le commit-ish peut être n'importe quelle balise, sha ou branche qui peut être fournie comme argument pour git checkout. La valeur par défaut est master.


1
Que signifie «pour les annuaires publics»?
Dan Dascalescu

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. Référence des documents npmjs
Aleksandar

Que signifie le protocole git+https://? Utiliser le gitprotocole pour le clonage et tirer de nouveaux changements tout en poussant à travers https?
tonix

60

La réponse acceptée fonctionne, mais je n'aime pas beaucoup l'idée de coller des jetons sécurisés dans le package.json

Je l'ai trouvé ailleurs, exécutez simplement cette commande unique comme indiqué dans la page de manuel git-config .

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

GITHUB_TOKEN peut être configuré en tant que variable d'environnement ou collé directement

puis j'installe des dépôts github privés comme: npm install user/repo --save


fonctionne également dans Heroku, il suffit de configurer la git config ...commande ci-dessus en tant que heroku-prebuildscript package.jsonet de configurer en GITHUB_TOKENtant que variable de configuration Heroku.


Cela fonctionne également dans Microsoft Visual Studio Team Services Build Chain, où je l'exécute en tant que «commande» juste avant l' npm installétape.
Lukx

2
Spectaculaire! Excellente solution pour les environnements CI! J'ai dû le modifier un peu; J'ai dû changer la fin pour...insteadOf ssh://git@github.com
Scott Rippey

2
Cela ne semble pas affecter mon npm. Il utilise toujours ssh lors de l'exécution npm install user/repo --save. Y a-t-il quelque chose que je dois configurer?
Marco Prins

1
Excellente solution pour l'environnement CI où la configuration de SSH est pénible (CloudBuild)! Merci beaucoup pour celui-ci!
Mathieu Bour

43

Il existe plusieurs façons de le faire, comme les gens le soulignent, mais les versions les plus courtes sont les suivantes:

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

par exemple

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

3
C'est la meilleure réponse! <3 Droit au but et même montrer des exemples de différents cas.
Renato Carvalho

Réponse succincte pour les dépôts publics, ce qui n'était malheureusement pas la question du PO. Pourtant, cela m'a aidé et je l'ai apprécié.
runderworld

J'ai mis à jour ma réponse pour inclure le cas du repo privé
Adrian


7

Étant donné que Git utilise curlsous le capot, vous pouvez utiliser un ~/.netrcfichier avec les informations d'identification. Pour GitHub, cela ressemblerait à ceci:

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

Si vous choisissez de l'utiliser access tokens, il peut être généré à partir de:

Paramètres -> Paramètres développeur -> Jetons d'accès personnels

Cela devrait également fonctionner si vous utilisez Github Enterprise dans votre propre entreprise. il suffit de mettre votre URL github d'entreprise sur le machineterrain.


a travaillé pour moi avec machine github.com login <token>sur une seule ligne et "package": "https://github.com/acme/privaterepo.git#commit-ish"ou directement avecnpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Voici une version plus détaillée de l'utilisation du jeton Github sans publication dans le package.jsonfichier.

  1. Créer un jeton d'accès Github personnel
  2. Configurer la réécriture d'URL dans ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Installez le référentiel privé. Niveau de journal détaillé pour le débogage des erreurs d'accès.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

Si l'accès à Github échoue, essayez d'exécuter la git ls-remote ...commandenpm install will print


0

Pour ma référence de référentiel privé, je ne voulais pas inclure de jeton sécurisé, et aucun des autres simples (c'est-à-dire ne spécifiant que dans package.json) ne fonctionnait. Voici ce qui a fonctionné:

  1. Je suis allé sur GitHub.com
  2. Navigué vers un référentiel privé
  3. Cliquez sur "Cloner ou télécharger" et URL copiée (qui ne correspond pas aux exemples ci-dessus)
  4. # Commit-sha ajouté
  5. Ran npm install

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.