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?

vashishatashu
la source
4
git + https: // <token-from-github>: [email protected]/ <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

leko
la source
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>:[email protected]/<user>/<GitRepo>.git"
}
vashishatashu
la source
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>: [email protected]/ <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.

momie
la source
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.

Michal Moravcik
la source
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://[email protected]
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]:[email protected]/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",
}
Adrian
la source
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
29
"dependencies": {
  "some-package": "github:github_username/some-package"
}

ou juste

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

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

Rayron Victor
la source
Fonctionne parfaitement et est le plus concis. Eu des erreurs d'autres solutions. Merci!
Ryall
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.

LeOn - Han Li
la source
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>:[email protected]/".insteadOf https://[email protected]/
  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://[email protected]/<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

Martins Balodis
la source
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
Le codeur
la source