Mettre à jour correctement ses dépendances avec npm

npm est le gestionnaire de paquets officiel de node.js. C'est un outil qui s'utilise en ligne de commande. Il permet de gérer les dépendances et la mise à jour de celles-ci.

Pour installer un paquet il suffit de taper la commande suivante :

npm install <nom_du_paquet>

Si on veut que ce paquet soit une une dépendance de notre projet il faut ajouter l'option -S. Cela va ajouter le paquet dans le fichier package.json.

Pour désinstaller le paquet il suffit de taper la commande suivante :

npm uninstall <nom_du_paquet>

Il y a de nombreuses options et diverses commandes. L'option help est votre amie.

Pour en revenir au titre, lorsqu'on veut installer toutes les dépendances d'un projet, dans le README du projet ou dans la procédure d'installation on trouve souvent la commande suivante :

npm install

Cette commande va bien installer les dépendances en se basant sur celles présentes dans le fichier package.json en respectant les syntaxes des versions :

  • soient les versions exactes si on a précisé les 3 nombres de laversion x.y.z où x représente la version majeure, y la version mineure et z les versions avec seulement des corrections de bugs.  
  • soient les versions avec correction de bug si on a par exemple 1.2.x
  • soient les versions équivalentes si on a mis par exemple ~1.2.3
  • soient les versions compatibles si on a mis ^1.2.3
  • ...

Les syntaxes sont nombreuses pour couvrir les différents cas.

Lorsqu'on utilise la commande npm install, avec ou sans nom de paquet derrière cela créé ou met à jour un fichier package-lock.json qui contient les versions exactes de toutes les dépendances installées. Du coup si on veut que la fabrication des fichiers cibles de son projet soit reproductible de manière fiable il faut être sûr de toujours utiliser les mêmes versions que ce soit en développement, en tests, en validation et à fortiori sur la production. Il faudrait exploiter le contenu du fichier package-lock.json. La commande npm install ne se base pas sur ce fichier. Mais depuis npm version 5.7.0 il existe une autre commande de npm qui permet d'exploiter le fichier package-lock.json :

npm ci

De cette façon le build est reproductible et on a une chaîne de mise en production fiable. Je m'étonne de ne pas voir plus souvent cette commande au lieu de simplement npm install ou npm i.

Phyxo 1.10.3

Une nouvelle version mineure qui corrige des liens manquants (retour à l'accueil par exemple) et quelques variables manquantes dans les templates. La version 1.10.3 est disponible sur le serveur d'archives : au format zip (phyxo-1.10.2.zip  - 7,9Mo) au format tar.gz (phyxo-1.10.2.tgz  - 5,9Mo)  […]

Lire la suite

Une version de maintenance de Phyxo

En attendant une future version majeure de Phxyo, voici une version de maintenance qui corrige quand même un problème majeur : on ne pouvait pas installer l'application depuis l'archive téléchargée. Il manquait dans cette celle-là un fichier .env (utilisé par symfony). Au passage, un grand merci à  […]

Lire la suite

Et une nouvelle version de Phyxo, la 1.10.1

Finalement, j'ai dû sortir la version 1.10.0 un peu trop vite et je sors deux jours après une nouvelle version. Merci à Laurent mon plus fidèle utilisateur. Cette version corrige deux choses : le script de mise à jour depuis la branche 1.9 ne portait pas le bon nom et forcément il n'était pas trouvé  […]

Lire la suite

Phxyo 1.10.0

Une nouvelle version de Phyxo vient de sortir. Quelques fonctionnalités côté visiteur : un nouveau thème et les anciens thèmes ne sont plus livrés mais sont toujours disponibles en extensions. Sous le capot, j'ai continué le "nettoyage". J'ai commencé à utiliser le système de session de  […]

Lire la suite

Version de maintenance de Phyxo

Aujourd'hui je viens de publier une nouvelle version de Phyxo, la 1.9.8. Il n'y a pas de nouveauté dans cette version puisque je respecte autant que possible la politique SemVer et comme c'est une version mineure il n'y a que des corrections de bugs. Au menu il y a donc : correction du lien de mise  […]

Lire la suite

Des vraies sessions

Je continue encore et toujours l'amélioration du code de Phyxo. J'ai fini de regrouper toutes les requêtes SQL dans des classes spécifiques (repositories). J'en ai profité aussi pour : arrêter de maintenir plusieurs thèmes trop anciens et j'utilise désormais un thème par défaut basé sur bootstrap  […]

Lire la suite

Sortie de Phyxo 1.9.3

J'ai sorti il y a 8 jours Phyxo 1.9.2 en pensant avoir corrigé le problème de mise à jour que j'avais rencontré. En fait il n'en était rien. J'ai fait de nombreux essais de mise à jour et cette fois j'ai le plaisir d'annoncer la sortie de Phyxo 1.9.3. J'en ai profité pour mettre à jour symfony vers  […]

Lire la suite

Regrouper les requêtes SQL

Toujours dans le but d'améliorer le code de Phyxo, après avoir supprimé les fonctions globales (au moins en majeure partie), j'ai voulu m'attaquer à la suppression de l'utilisation de global. Cette tâche étant finalement trop complexe à ne niveau, j'ai plutôt décidé de regrouper toutes les requêtes  […]

Lire la suite

Eviter les fonctions globales

Dans la lourde tâche qui consiste à améliorer le code de Phyxo, la plus grosse tâche est d'éviter les fonctions globales. Utiliser des fonctions globales a plusieurs inconvénients : oblige à les inclure (avec la fonction include) partout où on en a potentiellement besoin, même si on a passe dans une  […]

Lire la suite

Rendre obsolète une fonction

deprecated.png

Lorsqu'on ajoute des fonctionnalités à une application, on peut être amené à vouloir supprimer une fonction. Une bonne pratique est de d'abord rendre obsolète cette fonction avant de la supprimer. Cela est censé laisser le temps aux développeurs d'adapter le code qui utilise cette fonction. Par  […]

Lire la suite