Supposons que j'ai écrit un module pour Node.js que je voudrais garder privé. Je sais que je peux (devrait) ajouter la ligne:
"private": "true"
dans le fichier package.json
, et je sais aussi que je peux npm install
ce module en utilisant un chemin de système de fichiers ou un lien vers un référentiel git, y compris GitHub.
Je sais aussi que je peux mettre un tel chemin de système de fichiers ou un lien vers un dépôt git dans package.json
, de sorte que la partie dependencies
puisse ressembler un peu à ceci:
"dependencies": {
"myprivatemodule": "[email protected]:..."
}
Ce que je veux maintenant, ce n'est pas de créer un lien vers la dernière version, mais vers une version spécifique. La seule possibilité que je connaisse est de créer un lien vers un commit spécifique en utilisant son identifiant. Mais c’est beaucoup moins lisible et plus difficile à maintenir que d’utiliser un numéro de version tel que 0.3.1
.
Ma question est donc la suivante: est-il possible de spécifier quand même un tel numéro de version et d’obliger npm à rechercher dans le référentiel git le dernier commit qui inclut cette version?
Si non, comment résolvez-vous ce problème dans vos projets? Vivez-vous avec des ID de validation ou existe-t-il une meilleure solution à cela?
Un dépendance doit être disponible à partir de registry
pour être installé uniquement par spécifiant un descripteur version
.
Vous pouvez certainement créer et utiliser votre propre registre au lieu de registry.npmjs.org
si vos projets ne doivent pas être partagés publiquement.
Mais, si ce n'est pas dans un registre, il devra être référencé par URL ou URL Git . Pour spécifier une version avec une URL Git, incluez un <commit-ish>
approprié, tel qu'une balise, à la fin sous la forme d'un fragment d'URL .
Exemple, pour une balise nommée 0.3.1
:
"dependencies": {
"myprivatemodule": "[email protected]:...#0.3.1"
}
Note: l'extrait ci-dessus montre l'URL de base identique à celle qui a été publiée dans la question.
La partie coupée (
...
) doit être remplie:"myprivatemodule": "[email protected]:{owner}/{project}.git#0.3.1"
De plus, un format d'adresse différent sera nécessaire si l'accès SSH n'est pas disponible:
"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"
Selon votre système d'exploitation, vous pouvez également être en mesure de link
à la dépendance dans un autre dossier où vous l'avez cloné à partir de Github.
La réponse acceptée n'a pas fonctionné pour moi. Voici ce que je fais pour extraire un paquet de github:
npm install --save "git://github.com/username/package.git#commit"
Ou en l'ajoutant manuellement sur package.json:
"dependencies": {
"package": "git://github.com/username/package.git#commit"
}
Si par version vous entendez une balise ou une version, alors github fournit des liens de téléchargement pour celles-ci. Par exemple, si je veux installer fetch version 0.3.2 (il n’est pas disponible sur npm), j’ajoute à mon package.json
sous dependencies
:
"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",
Le seul inconvénient, comparé à l’approche de hachage de validation, est qu’il est garanti qu’un hachage ne représente pas le code modifié, alors qu’une étiquette peut être remplacée. Heureusement, cela arrive rarement.
Mettre à jour:
L’approche que j’utilise actuellement est la notation compacte pour une dépendance desservie par GitHub:
"dependencies": {
"package": "github:username/package#commit"
}
Où commit peut être n'importe quoi, comme une balise. Dans le cas de GitHub, vous pouvez même supprimer le github:
initial puisqu'il s'agit du paramètre par défaut.
Mon exemple de commentaire à @qubyte ci-dessus a été haché, alors voici quelque chose de plus facile à lire ...
La méthode décrite par @surjikal ci-dessus fonctionne pour les commits de branche, mais ne fonctionne pas pour un commit tree que je tentais d'inclure.
Le mode archive fonctionne également pour les commits. Par exemple, fetch _ @ a2fbf83
npm:
npm install https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz
fil:
yarn add https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz
format:
https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz
/archive/
:yarn add https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz
pour le vuex commit } associé _
Cette commande installe le paquet npm username/package
à partir de git commit spécifique:
npm install https://github.com/username/package#3d0a21cc
Ici, 3d0a21cc
est composé des 8 premiers caractères du hachage de validation.
Si vous utilisez plusieurs modules et que vous souhaitez contrôler davantage les versions, vous devez envisager de créer votre propre registre privé npm.
De cette façon, vous pouvez publier vos modules sur votre registre privé npm et utiliser les entrées package.json de la même manière que pour les modules publics.
Je décris ici un problème que j'ai rencontré lors de l'exécution de npm install
- le paquet n'apparaît pas dans node_modules
.
Le problème était que la valeur name
dans package.json
du package installé était différente du nom du package importé (clé dans package.json
de mon projet).
Donc, si votre nom de projet installé est some-package
(nom dans son package.json
) thenin package.json
de votre projet, écrivez: "some-package": "owner/some-repo#tag"
.