npm installa i repository github privati ​​per dipendenza in package.json


211

Sto cercando di installare il repository github privato da npm che include altri repository github privati ​​come dipendenza.

Ho provato molti modi e post, ma nessuno funziona. Ecco cosa sto facendo:

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

in package.json è come:

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

Qual è il modo giusto per farlo?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <utente> / <GitRepo> .git Supporta l'autenticazione e funziona bene in tutti i casi.
Vashishatashu,

Risposte:


147

Prova questo:

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

Puoi anche provare questo, dove visionmedia / express è name / repo:

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

Oppure (se esiste il modulo pacchetto npm):

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

Tratto da documenti NPM


1
npm ERR! Impossibile risolvere git HEAD ( github.com/user/reponame.git ) fatale: argomento ambiguo 'commit-ish': revisione sconosciuta o percorso non presente nell'albero di lavoro.
Vashishatashu,

Non funziona #xxxx non è richiesto come se non fosse considerato master e tutto il mio lavoro è master. Qualche altra idea?
Vashishatashu,

Stesso risultato se si rimuove l'intestazione (# commit-ish)?
leko,

Qual è il nome del tuo repository?
leko,

28
@vashishatashu, riguardo fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.Abbastanza ovvio che commit-ishè solo una parola di esempio che dovresti sostituire con un shadi uno specifico commit di cui hai bisogno. (o rimuovilo #commit-ishse hai bisogno dell'ultimo commit nella tua filiale principale)
meandre,

92

Di seguito ha funzionato perfettamente in tutti gli scenari di cui avevo bisogno:

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

2
Hai un link di riferimento per questa soluzione?
Ian,

3
@Ian: l'ho letto da qualche parte ma non ho un link di riferimento. Lo sto usando in produzione da oltre un anno senza alcun problema. Puoi ottenere il token oauth da Github come: Impostazioni -> Applicazioni -> Token di accesso personale -> Genera nuovo token. Questo token può avere lettura / scrittura o entrambi i privilegi secondo il tuo caso d'uso.
Vashishatashu,

6
@lan: per bitbucket è possibile utilizzare la sintassi seguente: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can essere ottenuto da: Team -> Gestisci team -> Chiave API
vashishatashu

@vashishatashu, grazie per un'ottima idea. Tuttavia, ottengo "fatale: blahblah non trovato" quando provo questo, anche se ho concesso l'accesso all'utente in questione al repository. Qualche idea?
Per Lundberg,

2
Ecco un bell'articolo su questa tecnica: rzrsharp.net/2013/07/02/…
cyberwombat

76

Per quelli di voi che sono venuti qui per le directory pubbliche, dai documenti di npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URL come dipendenze

Git URL può essere nella forma:

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

Il commit-ish può essere qualsiasi tag, sha o branch che può essere fornito come argomento per eseguire il checkout. L'impostazione predefinita è master.


1
Cosa significa "per elenchi pubblici"?
Dan Dascalescu l'

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. riferimento doc di npmjs
Aleksandar

Cosa significa il protocollo git+https://? Utilizzare il gitprotocollo per la clonazione ed eseguire nuove modifiche mentre si esegue l'operazione https?
tonix,

60

La risposta accettata funziona, ma non mi piace molto l'idea di incollare token sicuri in package.json

L'ho trovato altrove, basta eseguire questo comando una tantum come documentato nella manpage git-config .

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

GITHUB_TOKEN può essere impostato come variabile di ambiente o incollato direttamente

e quindi installo i repository github privati ​​come: npm install user/repo --save


funziona anche in Heroku, basta impostare il git config ...comando sopra come heroku-prebuildscript package.jsone impostare GITHUB_TOKENcome variabile di configurazione Heroku.


Questo funziona anche nella catena di build di Microsoft Visual Studio Team Services, dove la eseguo come un "comando" appena prima del npm installpassaggio.
Lukx,

2
Spettacolare! Ottima soluzione per ambienti CI! Ho dovuto modificarlo un po '; Ho dovuto cambiare la fine a...insteadOf ssh://git@github.com
Scott Rippey il

2
Questo non sembra influenzare il mio npm. Sta ancora usando ssh durante l'esecuzione npm install user/repo --save. C'è qualcosa che devo configurare?
Marco Prins,

1
Ottima soluzione per l'ambiente CI in cui l'installazione di SSH è un problema (CloudBuild)! Grazie mille per questo!
Mathieu Bour

43

Esistono diversi modi per farlo, come sottolineano le persone, ma le versioni più brevi sono:

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

per esempio

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

3
Questa è la risposta migliore! <3 Dritto al punto e persino mostrare esempi di casi diversi.
Renato Carvalho,

Risposta succinta per i depositi pubblici, che purtroppo non era la domanda del PO. Tuttavia, mi ha aiutato e l'ho apprezzato.
runderworld,

Ho aggiornato la mia risposta per includere il caso di pronti contro termine privato
Adrian


7

Dal momento che Git usa curlsotto il cofano, puoi usare il ~/.netrcfile con le credenziali. Per GitHub sarebbe simile a questo:

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

Se si sceglie di utilizzare access tokens, può essere generato da:

Impostazioni -> Impostazioni sviluppatore -> Token di accesso personale

Questo dovrebbe funzionare anche se stai usando Github Enterprise nella tua stessa azienda. inserisci l'URL github della tua azienda sul machinecampo.


ha lavorato per me con machine github.com login <token>una sola riga e "package": "https://github.com/acme/privaterepo.git#commit-ish"direttamente connpm install https://github.com/acme/privaterepo.git#commit-ish
abernier il

4

Ecco una versione più dettagliata di come utilizzare il token Github senza pubblicare nel package.jsonfile.

  1. Crea un token di accesso personale a github
  2. L'URL di installazione riscrive in ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Installa repository privato. Livello di log dettagliato per errori di accesso al debug.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

Nel caso in cui l'accesso a Github non riesca, provare a eseguire il git ls-remote ...comando che ilnpm install will print


0

Per il mio riferimento al repository privato non volevo includere un token sicuro, e nessuno degli altri semplici (cioè specificando solo in package.json) ha funzionato. Ecco cosa ha funzionato:

  1. Sono andato a GitHub.com
  2. Passato al repository privato
  3. Fai clic su "Clona o scarica" ​​e URL copiato (che non corrisponde agli esempi sopra)
  4. Aggiunto # commit-sha
  5. Ho eseguito l'installazione di npm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.