Dépendre d'une branche ou d'une balise à l'aide d'une URL git dans un package.json?

399

Disons que j'ai bifurqué un module de noeud avec un bugfix et je veux utiliser ma version fixe, sur une branche de fonctionnalité bien sûr, jusqu'à ce que le bugfix soit fusionné et publié.

Comment puis-je faire référence à ma version fixe dans la dependenciesma package.json?

hurrymaplelad
la source

Réponses:

569

À partir des documents npm :

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

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

Depuis la version 1.1.65 de NPM, vous pouvez faire ceci:

<user>/<project>#<branch>
hurrymaplelad
la source
130
Depuis npm 1.1.65, l'URL Github peut être plus concise user/project. npmjs.org/doc/files/package.json.html Vous pouvez attacher la branche commeuser/project#branch
dantheta
2
git://github.com/<user>/<project>.git#feature/blaha fonctionné mais <user>/<project>.git#feature/blahn'a pas fonctionné ... peut-être que leur expression régulière doit être plus avancée pour être prise feature/blahen compte. C'était npmv1.4.28
pulkitsinghal le
5
Comment incluez-vous le numéro de version?
Richard
1
@hurrymaplelad puis-je faire de même pour la demande de tirage? Si oui, comment est la commande?
roundrobin
3
Mise à jour du lien vers
kellen
136

selon le commentaire de @ dantheta:

Depuis npm 1.1.65, l'URL Github peut être un utilisateur / projet plus concis. npmjs.org/doc/files/package.json.html Vous pouvez attacher la branche comme user / project # branch

Donc

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

Ou pour la balise v1.12.0 sur jscs:

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

Notez que si vous utilisez npm --save, vous obtiendrez le git plus long

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

URL GitHub

Depuis la version 1.1.65, vous pouvez faire référence aux URL GitHub comme simplement "foo": "user / foo-project". Tout comme avec les URL git, un suffixe commit-ish peut être inclus. Par exemple:

{"nom": "foo",
"version": "0.0.0",
"dépendances": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}

justingordon
la source
2
Selon un commit, sha1 devrait être l'option préférée, en particulier si vous dépendez d'un dépôt qui n'est pas sous votre contrôle. Les branches et balises Git ne sont pas immuables (peuvent être supprimées / modifiées, par malveillance / par accident), alors qu'il est (presque) impossible de créer une collision sha1.
jakub.g
1
puis-je avoir une branche ET un commit pour commit-ish?
munchschair
45

Si vous souhaitez utiliser develou featurecréer une branche, ou si vous n'avez pas publié un certain package dans le registre NPM, ou si vous ne le pouvez pas, car il s'agit d'un module privé, vous pouvez pointer vers un git://URI au lieu d'un numéro de version dans votre package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://[email protected]:user/repo.git#ref"
}

La #refpartie est facultative et peut être une branche (comme master), une balise (comme 0.0.1) ou un ID de validation partiel ou complet.

Fizer Khan
la source
26

Sur la dernière version de NPM, vous pouvez simplement faire:

npm install gitAuthor/gitRepo#tag

Si le dépôt est un package NPM valide, il sera aliasé automatiquement dans package.json comme suit:

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

Si vous pouviez ajouter ceci à la réponse de @justingordon, il n'est pas nécessaire de créer un alias manuel maintenant!

vortex
la source
4
non, ça ne l'est pas. Il s'installe incorrectement. D'une manière ou d'une autre, il n'inclut pas la structure complète du répertoire du référentiel, seulement certains fichiers comme package.json, yarn.lock, readme et license. Il n'y a pas de dossiers src ou dist.
StalkAlex du
@StalkAlex docs.npmjs.com/cli/publish , puis vérifiez le dépôt que vous installez pour les scripts de génération. Peut-être qu'ils sont marqués ou que la post-installation ne fonctionne pas pour vous, c'est un problème pour ce package spécifique, espérons que cela aide!
vortex
@vortex merci, que voulez-vous dire exactement par marquage? Comment cela rend-il un tel problème?
StalkAlex
0

Si cela aide quelqu'un, j'ai tout essayé ci-dessus (https avec mode token) - et toujours rien ne fonctionnait. Je n'ai eu aucune erreur, mais rien ne serait installé dans node_modules ou package_lock.json. Si je modifiais le jeton ou une lettre du nom du référentiel ou du nom d'utilisateur, etc. - j'obtiendrais une erreur. Je savais donc que j'avais le bon token et le bon nom du repo.

J'ai finalement réalisé que c'était parce que le nom de la dépendance que j'avais dans mon package.json ne correspondait pas au nom dans le package.json du dépôt que j'essayais de tirer. Même l'installation de npm --verbose ne dit pas qu'il y a un problème. Il semble simplement ignorer la dépendance sans erreur.

MattS
la source