Ce n'est pas une question totalement nouvelle, mais je cherche depuis un bon moment maintenant et j'ai du mal à trouver une solution.
J'utilise un module pour mon application angulaire appelé angular-translate. Cependant, j'ai dû apporter quelques petites modifications au code source pour que tout fonctionne comme je le souhaite, et maintenant je veux conserver ces modifications npm install
. Un collègue m'a suggéré de bifurquer le dépôt du code source et de pointer vers mon dépôt fourchu en tant que dépendance, ce que j'ai essayé de cette manière, par exemple
npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz
Le premier me donne un répertoire comme celui-ci sans build. Juste un package.json, .npmignore et quelques fichiers markdown
-angular-translate
.npmignore
.nvmrc
CHANGELOG.md
package.json
etc
Le second npm install
me donne le repo complet, mais encore une fois, je n'obtiens pas de build comme lorsque j'utilise la commande npm install angular-translate
. J'ai vu quelques discussions sur l'exécution du script de pré-publication, mais je ne sais pas comment faire cela lors de l'installation de tous les modules. J'ai également essayé de publier le fork en tant que mon propre module dans le registre npm, mais encore une fois, je n'ai pas de build, et je ne suis pas sûr que ce soit la bonne chose à faire ...
Je m'excuse de mon ignorance sur le sujet. Je n'ai pas une grande expérience avec npm. J'adorerais avoir des commentaires sur ce problème. Il semble que cela puisse être un problème assez courant lorsque des modifications doivent être apportées au code source d'un paquet? Peut-être qu'il y a une meilleure solution? Merci d'avance pour votre aide.
la source
package.json
fichier de votre fourchette, sousscripts
, renommerprepublish
enprepare
. Il semble que lorsquenpm install
ounpm install github:user_name/fork_name --save
(et même pour le fil) est exécuté, il exécute également ce qui est dans leprepare
script. Cela suppose que leprepublish
script de ce package crée les fichiers de construction, ce qui est généralement le cas.npm install <ghusername>/<repoName>#branchName
prepare
script,dependencies
ildevDependencies
sera installé et le script de préparation sera exécuté, avant que le package ne soit empaqueté et installé."Mise à jour pour ceux qui utilisent npm 5:
J'ai trouvé que l'ajout d'un
"prepare": "npm run build"
à des scripts a résolu tous mes problèmes.la source
npm run build
etnpm run publish
et ne rencontrez un problème ou une douleur à moins qu'ils essaient un jour d'installer le repo via git?Le code publié sur npmjs.com n'est souvent pas ce qui se trouve dans le référentiel du package. Il est courant de «compiler» les fichiers source JavaScript dans des versions destinées à une consommation générale dans les bibliothèques. C'est ce qui est généralement publié sur npmjs.com.
Il est si courant que c'est une fonctionnalité de
npm
lancer automatiquement une étape de "construction" avant de publier (npm publish
). Cela s'appelait à l'origineprepublish
. Il semble que Npm a pensé qu'il serait pratique d'exécuter également leprepublish
script sur unnpm install
car c'était la manière standard d'initialiser un environnement de développement.Cela a conduit à une grande confusion dans la communauté. Il y a de très longs problèmes sur github à ce sujet.
En fin de compte, dans un effort pour ne pas changer l'ancien comportement, ils ont décidé d'ajouter deux autres scripts automatiques:
prepublishOnly
etprepare
.prepublishOnly
fait ce que vous attendez. Il ne fonctionne pasnpm install
. De nombreux responsables de paquets sont simplement passés à cela.Mais il y avait aussi ce problème que les gens voulaient ne pas dépendre de npmjs.com pour distribuer des versions de paquets. Les dépôts Git étaient le choix naturel. Cependant, il est courant de ne pas valider les fichiers "compilés" dans git. C'est ce qui a
prepare
été ajouté pour gérer ...prepare
est la bonne manièreSi vous avez un référentiel avec des fichiers sources mais qu'une étape de "build" est nécessaire pour l'utiliser,
prepare
fait exactement ce que vous voulez dans tous les cas (à partir de npm 4).Vous pouvez même insérer vos dépendances de construction
devDependencies
et elles seront installées avant d'prepare
être exécutées.Voici un exemple de mon package qui utilise cette méthode.
Problèmes avec
.gitignore
Il y a un problème avec cette option qui attire de nombreuses personnes. Lors de la préparation d'une dépendance, Npm et Yarn conserveront uniquement les fichiers répertoriés dans la
files
section depackage.json
.On peut voir que
files
tous les fichiers sont inclus par défaut et penser qu'ils sont terminés. Ce qui est facilement manqué, c'est que la.npmignore
plupart du temps remplace lafiles
directive et , s'il.npmignore
n'existe pas,.gitignore
est utilisé à la place.Donc, si vos fichiers construits sont répertoriés
.gitignore
comme une personne sensée et que vous ne faites rien d'autre,prepare
cela semblera casséSi vous résolvez
files
d'inclure uniquement les fichiers.npmignore
créés ou d'ajouter un fichier vide , vous êtes prêt.Ma recommandation est de définir
files
(ou, par inversion,.npmignore
) de telle sorte que les seuls fichiers réellement publiés soient ceux nécessaires aux utilisateurs du package publié. Imho, il n'est pas nécessaire d'inclure des sources non compilées dans les packages publiés.Réponse originale: https://stackoverflow.com/a/57503862/4612476
la source
Se greffer sur l'excellente réponse de @ RyanZim,
postinstall
est certainement une option valable pour cela.Effectuez l'une des opérations suivantes:
Si vous avez forké un autre référentiel de personnes, il peut être intéressant de soulever un problème pour illustrer le problème selon lequel l'installation de leur package via GitHub ne fonctionne pas car elle ne fournit pas les moyens nécessaires pour créer le script. À partir de là, ils peuvent soit accepter un PR pour résoudre ce problème avec une post-installation, soit le rejeter et vous pouvez faire le # 2.
la source
"postinstall": "cd node_modules/scrape-twitter/ && npm install && npm run build"
pour s'assurer que le package qui vous cause des problèmes est construit avant que votre application ne s'exécute. Comme dit, cependant, je préfère l'approche consistant à forger le dépôt à mon propre utilisateur, en ajoutant la post-installation au package lui-même et en l'utilisant dans mon application.postinstall
est une étape avant la bonne solution. Utilisez simplementprepare
. NousUtilisez simplement la commande
npm install git+https://[email protected]/myRepo/angular-translate.git
. Merci.la source