Dipendi da un ramo o tag usando un URL git in un package.json?


399

Supponiamo di aver biforcuto un modulo nodo con un bugfix e voglio usare la mia versione fissa, ovviamente su un ramo delle funzionalità, fino a quando il bugfix non viene unito e rilasciato.

Come farei riferimento alla mia versione fissa nel dependenciesmio package.json?

Risposte:


569

Dai documenti di npm :

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

A partire dalla versione 1.1.65 di NPM, puoi farlo:

<user>/<project>#<branch>

130
A partire da npm 1.1.65, l'URL di Github può essere più conciso user/project. npmjs.org/doc/files/package.json.html Puoi allegare il ramo comeuser/project#branch
dantheta,

2
git://github.com/<user>/<project>.git#feature/blahha funzionato ma <user>/<project>.git#feature/blahnon ... forse il loro regex deve essere più avanzato per tener feature/blahconto. Questo era npmv1.4.28
pulkitsinghal il

5
Come si include il numero di versione?
Richard,

1
@hurrymaplelad posso fare lo stesso per la richiesta pull? In tal caso, come è il comando?
roundrobin,

3
Collegamento ai documenti NPM aggiornato docs.npmjs.com/files/package.json#github-urls
kellen

136

per @ commento di dantheta:

A partire da npm 1.1.65, l'URL di Github può essere un utente / progetto più conciso. npmjs.org/doc/files/package.json.html Puoi collegare il ramo come utente / progetto # ramo

Così

"babel-eslint": "babel/babel-eslint",

O per il tag v1.12.0 su jscs:

"jscs": "jscs-dev/node-jscs#v1.12.0",

Nota, se usi npm --save, otterrai il git più lungo

Da 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.

URL GitHub

A partire dalla versione 1.1.65, puoi fare riferimento agli URL GitHub semplicemente come "pippo": "utente / pippo-progetto". Proprio come con gli URL git, è possibile includere un suffisso commit-ish. Per esempio:

{"name": "foo",
"version": "0.0.0",
"dependencies": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}


2
A seconda del commit, sha1 dovrebbe essere l'opzione preferita, in particolare se si dipende da un repository che non è sotto il proprio controllo. I rami e i tag Git non sono immutabili (possono essere eliminati / modificati, maliziosamente / per caso), mentre è (quasi) impossibile creare una collisione sha1.
jakub.g,

1
posso avere una filiale e un commit per commit-ish?
munchschair

45

Se vuoi usare develo featureramificare, o non hai pubblicato un certo pacchetto nel registro NPM, oppure non puoi perché è un modulo privato, puoi puntare a un git://URI anziché a un numero di versione nel tuo package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://git@github.com:user/repo.git#ref"
}

Il #ref parte è facoltativa e può essere un ramo (come master), un tag (come 0.0.1) o un ID commit parziale o completo.


26

Nell'ultima versione di NPM puoi semplicemente fare:

npm install gitAuthor/gitRepo#tag

Se il repository è un pacchetto NPM valido, verrà auto-aliasato in package.json come:

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

Se potessi aggiungere questo alla risposta di @justingordon, non è necessario un aliasing manuale ora!


4
no, non lo è. Si installa in modo errato. In qualche modo non include l'intera struttura di directory dal repository, solo alcuni file come package.json, yarn.lock, readme e licenza. Non ci sono cartelle src o dist.
StalkAlex,

@StalkAlex docs.npmjs.com/cli/publish e quindi controllare il repository che si sta installando per gli script di build. Forse sono taggati o il post-installazione non funziona per te, è comunque un problema per quel pacchetto specifico spero che questo ti aiuti!
vortice,

@vortex grazie, cosa intendi esattamente con tag? In che modo questo rende tale problema?
StalkAlex,

0

Se aiuta qualcuno, ho provato tutto sopra (https con modalità token) - e ancora niente funzionava. Non ho riscontrato errori, ma nulla verrebbe installato in node_modules o package_lock.json. Se cambiassi il token o qualsiasi lettera nel nome del repository o nel nome utente, ecc., Visualizzerei un errore. Quindi sapevo di avere il token e il nome repository giusti.

Alla fine mi sono reso conto che il nome della dipendenza che avevo nel mio pacchetto.json non corrispondeva al nome nel pacchetto.json del repository che stavo cercando di estrarre. Anche npm install --verbose non dice che c'è alcun problema. Sembra semplicemente ignorare la dipendenza senza errore.

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.