Le saviez vous ? Il est possible de refuser d'installer un paquet npm en global !
Quand on vous demande par exemple :
npm install -g gulp
On installe alors la commande au niveau du système. Ça veut dire que tous les projets hébergés sur votre OS vont utiliser la même version.
Alors, certes, on peut installer une version locale qui prendra le dessus. Mais dans ce cas, pourquoi polluer son environnement global ? Pour que la commande soit dans le path ? Voici une autre façon de procéder.
npm install gulp
va donc installer le paquet dans un dossier node_modules
du dossier courant. Ce qu'on ne sait pas forcément, c'est que quand un paquet propose un binaire, il est disponible dans node_modules/.bin/commande
. Ainsi, pour notre exemple, on peut utiliser la commande de la sorte :
./node_modules/.bin/gulp
sans l'installer en global.
Oui, mais c'est trop chiant à taper :o
Alors on a deux solutions. La première est de se faire un alias. Ça a l'avantage d'être rapide :
alias gulp=$PWD/node_modules/.bin/gulp
puis
gulp
Si on se trouve dans un projet où la commande est installée en local, elle sera exécutée dans la version installée dans ce projet. Sinon, on se mange une erreur exprimant l'absence de la commande.
La deuxième solution est moins sexy, mais elle a l'avantage de fonctionner directement après avoir installé le projet. On va simplement utiliser un script npm. On va éditer package.json pour ajouter un script qui va juste lancer la commande :
{
"scripts": {
…
"gulp": "gulp"
}
}
Et on pourra alors appeler :
npm run gulp
C'est un peu plus long à taper, mais le gros avantage, c'est que simplement après le npm install
initial, la commande sera disponible sans rappeler au dev qu'il doit aussi installer tel ou tel package en global ou se créer un alias.