Trouver et installer des packages sous Node.js
Node.js dispose d’une pléthore de modules, et/ou de packages qui sont, mis à disposition sur npm.js. Ces modules permettent de gérer tout ou presque des tâches quotidiennes dont nous avons besoin pour développer nos projets web. Allant de la mise en place d’un serveur local, en passant par la vérification des fichiers sources, ou encore l’optimisation de nos codes et de nos images. Bref, tout ou presque a déjà été pensé, sans compter que nous pouvons également publier nos propres modules et les mettre à disposition de la communauté. C’est en grande partie ce qui fait la force de Node.js.
Comment trouver des modules?
Première étape, connaître ce que l’on cherche, ou du moins, ce dont on a besoin. Pour cela il suffit de se rendre sur le site npm.js et de saisir quelques mots clés depuis le moteur de recherche… cela peut être de simples mots comme « image » qui renverra 9790 packages potentiels, ou « server » qui lui en renverra 19833 ou encore « sass » qui proposera 4575 réponses… ou bien cela peut être des expressions plus élaborées comme « server http local » qui ne retournera que 81 possibilités, ou « optimisation html » avec simplement 11 packages à disposition.
Parmi, l’ensemble des réponses, il faut noter qu’il existe diverses familles de packages. Enfin disons plutôt divers modes d’utilisation de ces packages. Prenons par exemple le mot clé « sass ».. vous trouverez aussi bien
- sass, une simple API utilisable directement en JavaScript
- node-sass, utilisable directement sous Node.js par nos propres modules
- postcss-scss, qui comme son nom l’indique travaillera de concert avec le plugin PostCSS
- grunt-sass, qui la encore comme son nom l’indique travaillera avec l’automatiseur Grunt
- gulp-sass, idem que le précédent mais cette fois ci travaillant avec l’automatiseur Gulp
Donc quelque soit notre flux de travail, et nos besoins, il y a très souvent un ensemble de possibilités à disposition. Toutes ne sont pas identiques, ou ne produisent pas les mêmes services, mais la grande souplesse avec Node.js, c’est que nous pouvons toujours croiser les outils.
Revenons quelques instant sur la page npm.js et entrons à nouveau le mot clé « sass ». Prenons le premier résultat, à l’instar de tout moteurs de recherche, nous avons un grand nombre d’informations à disposition pour nous guider dans notre choix.
- sass, le titre du module
- A pure JavaScript implementation of Sass, qui est une brève description, certaines sont plus explicites
- published 9 days ago, qui montre la date de dernière publication, ou de mise à jour, certains modules peuvent parfois dater de plusieurs années et ne plus avoir été maintenu
- v 1.1.1, qui correspond à la version du module, encore une fois à ce sujet voir le site Gestion sémantique de version 2.0.0 qui détaille le principe de numérotation des versions
- style, scss, sass, preprocessor, css, qui sont les divers mots clés attachés à ce module
- sassbot, l’auteur du module
Toujours en explorant les informations présentent sur le fragment de résultats, nous voyons sur la partie droite trois bandes colorées (cyan, mauve et rouge) respectivement précédées des lettres p (popularité), q (qualité) et m (maintenance). Ce qui nous permet également, et d’un rapide coup d’œil, de voir à quel type d’outils nous avons à faire.
À y regarder de plus près, toutes ces informations, sont les informations qui figurent au sein du fichier package.json. Voici comment ce fichier a pu être confectionné, et en quoi il faut s’attacher si on souhaite publier ses propres modules.
Une fois le module trouvé, comment l’installer?
Depuis le gestionnaire de paquet NPM, cela devient un jeu d’enfant que de mettre à disposition ces modules pour nos projets. À la différence d’applications classiques, ces outils peuvent être installés à la demande, et en fonction des besoins pour chaque projet. Bien que certains modules puissent être installés de manière globale, dans la majeure partie de contextes, il reste préférable de les installer localement pour chaque projet, surtout si nous travaillons en équipe.
Prenons comme exemple, node-sass. Sur la page npmjs, comme sur le github, le développeur indique généralement la ligne de commande ad hoc nécessaire. Nous pouvons la copier, et ensuite il suffit de pointer son invite de commande sur le dossier projet pour installer le module localement. Si le module est un module de type CLI (Command Line Interface), nous pouvons alors envisager une installation globale en ajoutant le paramètre -g
. (voir npm-install – Install a package pour plus de détails)
npm install module npm install -g module
En mode global, les fichiers seront alors installés quelque part à coté du cœur de Node.js et disponible quelque soit le projet. Si nous procédons à une installation locale, NPM place alors les fichiers nécessaires au sein du projet, en fait à la racine du dossier vers lequel l’invite de commande pointe et créera automatiquement un dossier node_modules. Malgré cela, il peut quand même être judicieux d’en informer le fichier package.json, et, ceci pour deux principales raisons;
- Lorsque nous archiverons le projet, nous pourrons uniquement archiver les fichiers sources, car, le moment voulu, l’ensemble des modules nécessaires s’installeront informés par le fichier package.json.
- Si nous travaillons avec un collaborateur, il nous suffit simplement de lui transmettre le fichier package.json, et de là il pourra en un simple clic configurer le projet avec l’ensemble des modules nécessaires.
Il est important de prendre en compte qu’il existe diverses manières d’employer Node.js dans nos projets. Parfois, nous exploitons le framework lors du développement de nos applications en utilisant des outils de test ou qui vont assouplir les flux de travail (minification, concaténation, compilation…), parfois, nous l’employons en production depuis un serveur et là les modules auront quelques fonctionnalités différentes et propre au fonctionnement de l’application. Auquel cas, lors de l’installation, les modules peuvent être utiles principalement dans un mode (développement) ou dans un autre (production)… sans oublier que des modes de tests, de validations, ou tout autres besoins peuvent également être mis en place.
La bascule entre les divers modes peut être effectuée soit en usant depuis la ligne de commande de paramètres type --production
, ou encore --dev
, soit de manière plus permanente et surtout plus facilement accessible depuis les scripts de l’application en initialisant la variable d’environnement NODE_ENV à la valeur souhaitée parmi; testing
, staging
, development
, production
ou à vos propres modes internes et personnels.
NPM prévoie ces cas de figures et propose diverses manières de gérer ces dépendances au sein du fichier package.json en usant des propriétés dependencies
, devDependencies
et peerDependencies
. Je vous invite a regarder de près l’article What’s the difference between dependencies, devDependencies and peerDependencies in npm package.json file? ou dependencies or devDependencies?
Procédons à une installation
Installons le module image-size en version locale (notons qu’il s’agit d’un module pris au hasard). Pointons vers le dossier projet, et assurons nous qu’un projet soit déjà été initié (présence du fichier package.json), sinon initialisons un projet de base. Lors de l’installation nous allons également demander de gérer les dépendances en mode dev en ajoutant le paramètre --save-dev
.
npm install image-size --save-dev
Voir l’ensemble de l’installation, depuis la création du dossier projet, l’initialisation et l’installation, sur l’image capture ci-dessous.
En ouvrant l’arborescence du dossier, nous apercevons deux nouveaux éléments, le fichier package-lock.json et le dossier node_modules.
-
- package-lock.json, ce fichier se génère et se mets à jour automatiquement lors de chaque modification du dossier node_modules ou du fichier package.json. Pour plus de précisions voir package-lock.json – A manifest of the manifest.
- node_modules, ce dossier va recevoir l’intégralité des modules installés, et le cas échéant, de leur dépendances nécessaires. Pour de plus de précisions voir npm-folders – Folder Structures Used by npm.
Installation et réinstallation
Une fois le projet mis en place, et après avoir installé l’ensemble des modules nécessaires, il suffit alors de partager le fichier package.json avec un collaborateur pour que celui-ci puisse installer en un simple clic l’ensemble des modules nécessaires et de leur dépendances. Pour le mettre en application, créez un dossier vide, nommez le Projet-Node-Reinstall, clonez le fichier package.json du projet précédent. Une fois le pointeur de l’invite de commande placé sur ce nouveau projet, lancez simplement la commande npm install
. Le dossier node_modules et le fichier package-lock.json vont ainsi être installés en fonction des directives contenus dans le fichier package.json.