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?
javascript
gulp
Stepan Suvorov
la source
la source
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.
npm 5.2+
L'
npx
utilitaire fourni avecnpm
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 parnpx
). Par exemple, si vous souhaitez appeler un installé localementeslint
, vous pouvez faire:npm <5,2
Lorsqu'il est utilisé dans un
script
champ de votre package.json,npm
recherchenode_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):
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 quegulp
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.Addenda:
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.
la source
./node_modules/.bin/gulp
.gulp
etcoffee
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 suivantLocal 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 :
Essentiellement, lorsque vous installez
gulp
localement le script n'est pas dans votrePATH
et vous ne pouvez donc pas simplement tapergulp
et attendre que le shell trouve la commande. En l'installant globalement, legulp
script pénètre dans votrePATH
car lenode/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 legulpfile.js
.la source
gulp
package installé à l'échelle mondiale est nécessaire pour mettrenode_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 avecla source
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 lainstall --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.
la source
Techniquement, vous n'avez pas besoin de l'installer globalement si le
node_modules
dossier de votre installation locale se trouve dans votrePATH
. Ce n'est généralement pas une bonne idée.Sinon, si vous faites
npm test
référence,gulp
vous pouvez simplement tapernpm 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.
la source
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.
la source
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.):
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.
la source