299 votes

Pourquoi devons-nous installer gulp globalement et localement ?

2 manuels sur gobler disons que je dois installer gulp d'abord globalement (avec le drapeau -g) et ensuite une fois de plus localement. Pourquoi ai-je besoin de cela ?

12 votes

Le projet lui-même "Page "Mise en route dit la même chose. (Il ne dit pas non plus pourquoi.)

11 votes

J'aimerais que npm puisse utiliser un paquet de dépendance installé globalement qui a la même version que le paquet local. 5MB de trucs glup pour chaque répertoire de projet :/

0 votes

@Ciantic Pas de garanties, mais... stackoverflow.com/a/25879563/444255

243voto

qubyte Points 2079

Lorsqu'un outil est installé globalement, il doit être utilisé par un utilisateur comme un utilitaire de ligne de commande n'importe où, y compris en dehors des projets node. Les installations globales pour un projet node sont mauvais parce qu'ils rendent le déploiement plus difficile.

npm 5.2+

El npx fourni avec npm 5.2 résout ce problème. Avec lui, vous pouvez invoquer les utilitaires installés localement comme des utilitaires installés globalement (mais vous devez commencer la commande par npx ). Par exemple, si vous souhaitez invoquer un programme eslint que vous pouvez faire :

npx eslint .

npm < 5.2

Lorsqu'il est utilisé dans un script de votre package.json, npm recherches node_modules pour l'outil ainsi que les modules installés globalement, donc l'installation locale est suffisante.

Donc, si vous êtes satisfait de (dans votre package.json) :

"devDependencies": {
    "gulp": "3.5.2"
}
"scripts": {
    "test": "gulp test"
}

etc. et de fonctionner avec npm run test alors vous ne devriez pas avoir besoin de l'installation globale du tout.

Les deux méthodes sont utiles pour mettre les gens en contact avec votre projet puisque sudo n'est pas nécessaire. Cela signifie également que gulp sera mis à jour lorsque la version sera modifiée dans le package.json, de sorte que tout le monde utilisera la même version de gulp lors du développement de votre projet.

Addendum :

Il semble que gulp ait un comportement inhabituel lorsqu'il est utilisé de manière globale. Lorsqu'il est utilisé en tant qu'installation globale, gulp recherche un gulp installé localement pour lui passer le contrôle. Par conséquent, une installation globale de gulp nécessite une installation locale de gulp pour fonctionner. La réponse ci-dessus reste cependant valable. Les installations locales sont toujours préférables aux installations globales.

3 votes

Oui mais que faire quand on n'a pas d'accès à l'internet ? Comment utiliser gulp s'il n'est pas installé globalement ?

3 votes

@IGRACH Le script ci-dessus n'utilise pas de connexion internet. Si vous voulez faire la même chose sans utiliser un champ script dans package.json, alors utilisez ./node_modules/.bin/gulp .

1 votes

J'ai défini des alias pour gulp y coffee pour que les commandes fonctionnent à partir de la racine de mon projet node (ex. alias gulp="node_modules/.bin/gulp" ). De cette façon, les commandes sont faciles à utiliser en cas de besoin et les conflits de versions globales/locales ne se produisent pas.

87voto

dwayne Points 48

TLDR ; Voici pourquoi :

La raison pour laquelle cela fonctionne est que gulp essaie d'exécuter votre gulpfile.js en utilisant votre version locale de gulp voir aquí . D'où la raison d'une installation globale et locale de gulp.

Essentiellement, lorsque vous installez gulp localement le script n'est pas dans votre PATH et donc vous ne pouvez pas juste taper gulp et s'attendre à ce que le shell trouve la commande. En l'installant globalement, le gulp script entre dans votre PATH parce que le global node/bin/ est très probablement sur votre chemin.

Pour respecter vos dépendances locales cependant, gulp utilisera la version d'elle-même installée localement pour exécuter le programme gulpfile.js .

81voto

Berislav Lopac Points 3251

Vous pouvez lier l'installation globale gulp localement avec

npm link gulp

69voto

Derek Greer Points 3260

La question " Pourquoi devons-nous installer gulp globalement et localement ? "peut être décomposée en deux questions :

  1. Pourquoi dois-je installer gulp localement si je l'ai déjà installé globalement ?

  2. Pourquoi dois-je installer gulp globalement si je l'ai déjà installé localement ?

Plusieurs autres personnes ont fourni d'excellentes réponses à ces questions de manière isolée, mais j'ai pensé qu'il serait utile de regrouper les informations dans une réponse unifiée.

Pourquoi dois-je installer gulp localement si je l'ai déjà installé globalement ?

L'installation de gulp en local se justifie pour plusieurs raisons :

  1. Inclure les dépendances de votre projet localement garantit que la version de gulp (ou d'autres dépendances) utilisée est celle prévue à l'origine.
  2. Node ne prend pas en compte les modules globaux par défaut lors de l'utilisation de require() (dont vous avez besoin pour inclure gulp dans votre script). En fin de compte, c'est parce que le chemin vers les modules globaux n'est pas ajouté à NODE_PATH par défaut.
  3. Selon l'équipe de développement de Node, les modules locaux se chargent plus rapidement. Je ne peux pas dire pourquoi, mais cela semble être plus pertinent pour l'utilisation de Node en production (c'est-à-dire les dépendances d'exécution) que pour le développement (c'est-à-dire les dépendances de développement). Je suppose qu'il s'agit d'une raison légitime, car certains peuvent se soucier de l'avantage mineur en termes de vitesse de chargement des modules locaux par rapport aux modules globaux, mais n'hésitez pas à froncer les sourcils pour cette raison.

Pourquoi dois-je installer gulp globalement si je l'ai déjà installé localement ?

  1. La raison d'être de l'installation globale de gulp est simplement la commodité d'avoir l'exécutable gulp automatiquement trouvé dans votre chemin système.

Pour éviter l'installation locale, vous pouvez utiliser npm link [package] mais la commande link ainsi que la commande install --global ne semble pas prendre en charge la commande --save-dev ce qui signifie qu'il ne semble pas y avoir de moyen simple d'installer gulp de manière globale et d'ajouter facilement la version correspondante à votre fichier package.json local.

En fin de compte, je crois qu'il est plus logique d'avoir la possibilité d'utiliser des modules globaux pour éviter d'avoir à dupliquer l'installation d'outils communs dans tous vos projets, en particulier dans le cas d'outils de développement tels que grunt, gulp, jshint, etc. Malheureusement, il semble que vous finissiez par vous battre un peu contre les outils lorsque vous allez à contre-courant.

8voto

robrich Points 5284

Techniquement, il n'est pas nécessaire de l'installer globalement si le programme node_modules de votre installation locale se trouve dans le dossier PATH . En général, ce n'est pas une bonne idée.

Sinon, si npm test références gulp alors vous pouvez simplement taper npm test et ça va lancer le gulp local.

Je n'ai jamais installé gulp globalement -- je pense que c'est une mauvaise habitude.

3 votes

Une meilleure approche que de le mettre dans votre chemin est d'utiliser NPM scripts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X