web-dev-qa-db-fra.com

npm installer et compiler le repo forké de github

Ce n'est pas une question totalement nouvelle, mais cela fait un moment que je regarde autour de moi et j'ai du mal à trouver une solution.

J'utilise un module pour mon application angular appelée angular-translate. Cependant, j'ai dû apporter quelques petites modifications au code source pour que tout fonctionne comme je le souhaiterais, et je souhaite maintenant conserver ces modifications sur npm install. Un collègue a suggéré que je branche le référentiel du code source et que je pointe mon référentiel forké 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 construction. Juste un package.json, .npmignore, et quelques fichiers de démarques

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc

Le second npm install me donne le rapport complet, mais là encore, je ne reçois pas de construction comme lorsque j'utilise la commande npm install angular-translate. J'ai eu quelques discussions sur l'exécution du script de prépublication, mais je ne sais pas comment procéder lorsque j'installe tous les modules. J'ai également essayé de publier le fork en tant que mon propre module dans le registre npm, mais là encore, je n'ai pas de version, et je ne suis pas sûr que ce soit la bonne chose à faire ...

Je m'excuse pour mon ignorance sur le sujet. Je n'ai pas beaucoup d'expérience avec NPM. J'adorerais recevoir des commentaires sur ce sujet. Il semble que cela puisse être un problème assez commun 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.

102
hughesjmh

Essayez npm install <ghusername>/<repoName>, où <ghUsername> est votre nom d'utilisateur GitHub (sans le @) et <repoName> est le nom du référentiel. Cela devrait correctement l'installer. Vous voudrez probablement utiliser l'indicateur --save ou --save-dev avec la commande install pour enregistrer la dépendance dans votre package.json.

Si cela ne fonctionne pas correctement, vérifiez le contenu de votre fichier .npmignore.

Ne paniquez pas si la commande d'installation prend beaucoup de temps; l'installation à partir d'un référentiel git est plus lente que l'installation à partir du registre npm.


Modifier:

Votre problème est que dans votre cas, dist/ n'est pas engagé dans le référentiel (puisqu'il se trouve dans le .gitignore). C'est là que réside le code actuel. dist/ est construit à partir des fichiers de src/ avant la publication du package dans le registre npm, mais dist/ n'est jamais affecté au référentiel.

C'est moche, mais dans ce cas, vous devrez retirer dist/ du .gitignore puis lancer:

npm run build
git add .
git commit
git Push

(Assurez-vous d’avoir exécuté npm install en premier)

Vous devriez alors pouvoir installer à partir de github.

Il pourrait y avoir un autre moyen de faire cela en utilisant un script postinstall, mais je ne suis pas sûr que ce soit possible; Je n'ai jamais essayé.

110
RyanZim

Mise à jour pour ceux qui utilisent npm 5:

À partir de npm @ 5, les scripts prepublish sont obsolètes.

Utilisez prepare pour les étapes de construction et prepublishOnly pour le téléchargement uniquement.

J'ai trouvé que l'ajout d'un "prepare": "npm run build" aux scripts corrigeait tous mes problèmes.

6
Simon

Se greffer sur l'excellente réponse de @ RyanZim, postinstall est définitivement une option valable pour cela.

Faites l'une des choses suivantes:

  1. Mettez à jour le package.json dans votre référentiel forké pour ajouter un élément postinstall aux scripts. Ici, lancez ce dont vous avez besoin pour obtenir la sortie compilée (Preferred).
  2. Mettez à jour votre package.json et ajoutez un postinstall qui met à jour le répertoire nécessaire dans node_modules.

Si vous avez créé un référentiel d'utilisateurs tiers, il peut être intéressant de soulever un problème illustrant le problème suivant: l'installation de leur paquet via GitHub ne fonctionne pas car elle ne fournit pas les moyens nécessaires pour générer 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 le faire # 2.

4
Mike B

Utilisez simplement la commande npm install git+https://[email protected]/myRepo/angular-translate.git. Merci.

0
Bimal Jha