2 manuels sur gulp disent que je dois installer gulp d'abord globalement (avec le drapeau -g) puis une fois de plus localement. Pourquoi ai-je besoin de ça?
2 manuels sur gulp disent que je dois installer gulp d'abord globalement (avec le drapeau -g) puis une fois de plus localement. Pourquoi ai-je besoin de ça?
Réponses:
Lors de l'installation d'un outil à l'échelle mondiale, il doit être utilisé par un utilisateur comme utilitaire de ligne de commande n'importe où, y compris en dehors des projets de noeud. Les installations globales pour un projet de nœud sont mauvaises car elles rendent le déploiement plus difficile.
L' npx
utilitaire fourni avec npm
5.2
résout ce problème. Avec lui, vous pouvez invoquer des utilitaires installés localement comme des utilitaires installés globalement (mais vous devez commencer la commande par npx
). Par exemple, si vous souhaitez appeler un installé localement eslint
, vous pouvez faire:
npx eslint .
Lorsqu'il est utilisé dans un script
champ de votre package.json, npm
recherche node_modules
l'outil ainsi que les modules installés globalement, donc l'installation locale est suffisante.
Donc, si vous êtes satisfait (dans votre package.json):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
etc. et en cours d'exécution, npm run test
vous ne devriez pas du tout avoir besoin de l'installation globale.
Les deux méthodes sont utiles pour mettre en place des personnes avec votre projet car elles sudo
ne sont pas nécessaires. Cela signifie également que gulp
cela sera mis à jour lorsque la version sera remplacée dans le package.json, donc tout le monde utilisera la même version de gulp lors du développement avec votre projet.
Il semble que gulp ait un comportement inhabituel lorsqu'il est utilisé à l'échelle mondiale. Lorsqu'il est utilisé en tant qu'installation globale, gulp recherche un gulp installé localement pour 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 est toujours valable. Les installations locales sont toujours préférables aux installations globales.
./node_modules/.bin/gulp
.
gulp
et coffee
donc les commandes fonctionnent à partir de la racine de mon projet de nœud (par exemple. alias gulp="node_modules/.bin/gulp"
). De cette façon, les commandes sont faciles à utiliser si nécessaire et les conflits de version globale / locale ne se produisent pas.
gulp
, cela me donne le message d'erreur suivant Local gulp not found in ...
. Pour autant que je sache, il devrait d'abord examiner les modules_noeud locaux et s'il n'est pas trouvé, il devrait ensuite examiner les modules installés à l'échelle mondiale, n'est-ce pas? Merci!
TLDR; Voici pourquoi :
La raison pour laquelle cela fonctionne est parce que
gulp
tente d'exécuter votre engulpfile.js
utilisant votre version installée localement degulp
, voir ici . 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 vous ne pouvez donc pas simplement taper gulp
et attendre que le shell trouve la commande. En l'installant globalement, le gulp
script pénètre dans votre PATH
car le node/bin/
répertoire global est très probablement sur votre chemin.
Pour respecter vos dépendances locales, gulp
utilisez votre version de lui-même installée localement pour exécuter le gulpfile.js
.
gulp
package installé à l'échelle mondiale est nécessaire pour mettre node_modules/.bin/gulp
en chemin. Le stockage est bon marché mais jeter MB pour simuler un lien symbolique est une négligence pure de l'OMI.
Vous pouvez lier le global installé gulp
localement avec
npm link gulp
npm link
.
La question " Pourquoi devons-nous installer gulp globalement et localement? " Peut être décomposée en deux questions suivantes:
Pourquoi dois-je installer gulp localement si je l'ai déjà installé globalement?
Pourquoi dois-je installer gulp globalement si je l'ai déjà installé localement?
Plusieurs autres ont fourni d'excellentes réponses à ces questions isolément, mais j'ai pensé qu'il serait utile de consolider les informations dans une réponse unifiée.
Pourquoi dois-je installer gulp localement si je l'ai déjà installé globalement?
La justification de l'installation de gulp localement est composée de plusieurs raisons:
Pourquoi dois-je installer gulp globalement si je l'ai déjà installé localement?
Pour éviter l'installation locale, vous pouvez utiliser npm link [package]
, mais la commande link ainsi que la install --global
commande ne semblent pas prendre en charge l' --save-dev
option, ce qui signifie qu'il ne semble pas y avoir de moyen facile d'installer gulp globalement, puis d'ajouter facilement la version à votre fichier package.json local.
En fin de compte, je pense 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. on dirait qu'on finit par se battre un peu contre les outils quand on va à contre-courant.
Techniquement, vous n'avez pas besoin de l'installer globalement si le node_modules
dossier de votre installation locale se trouve dans votre PATH
. Ce n'est généralement pas une bonne idée.
Sinon, si vous faites npm test
référence, gulp
vous pouvez simplement taper npm test
et il exécutera la gulp locale.
Je n'ai jamais installé gulp dans le monde - je pense que c'est une mauvaise forme.
Je ne sais pas si notre problème était directement lié à l'installation de gulp uniquement localement. Mais nous avons dû installer nous-mêmes un tas de dépendances. Cela conduit à un "énorme" package.json et nous ne sommes pas sûrs que ce soit vraiment une bonne idée d'installer gulp uniquement localement. Nous avons dû le faire à cause de notre environnement de construction. Mais je ne recommanderais pas d'installer gulp pas globalement si ce n'est pas absolument nécessaire. Nous avons rencontré des problèmes similaires à ceux décrits dans le blog suivant
Aucun de ces problèmes ne se pose pour aucun de nos développeurs sur leurs machines locales car ils ont tous installé gulp dans le monde. Sur le système de build, nous avons eu les problèmes décrits. Si quelqu'un est intéressé, je pourrais approfondir ce problème. Mais pour l'instant, je voulais juste mentionner que ce n'est pas un chemin facile pour installer gulp uniquement localement.
Juste parce que je ne l'ai pas vu ici, si vous êtes sur MacOS ou Linux, je vous suggère d'ajouter ceci à votre PATH (dans votre bashrc, etc.):
node_modules/.bin
Avec cette entrée de chemin relatif, si vous êtes assis dans le dossier racine de n'importe quel projet de noeud, vous pouvez exécuter n'importe quel outil de ligne de commande (eslint, gulp, etc. etc.) sans vous soucier des "installations globales" ou npm run
etc.
Une fois que j'ai fait cela, je n'ai jamais installé de module globalement.