Si vous gérez plusieurs projets, alors vous avez dû être confronté comme nous à des problèmes de compatibilité avec des paquets NPM lorsque vous êtes en développement sur votre machine selon l'age de votre projet.
Dans notre cas, nous développons encore activement des projets anciens pour lesquels nous utilisions à l'époque Gulp en version 3 pour compiler les fichiers Javascript et Sass/Less. Pour autant, pour les nouveaux projets, nous préférons toujours utiliser les versions les plus récentes des outils.
C'est là que la gestion des projets se complique, la version 3 de Gulp dans notre exemple n'est pas compatible avec les versions plus récente de Node.
NVM, pour Node Version Manager, permet comme son nom l'indique, d'avoir différentes versions de Node et de les faire cohabiter sur votre machine.
Pour installer NVM, vous pouvez exécuter la commande suivante :
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
Pour l'utiliser, vous devez d'abord installer une version de Node puis dire à NVM de l'utiliser :
# Installer la version 10.10.0 de Node nvm install 10.10.0 # Installer la version la plus récente de Node nvm install node # Utiliser la version 10.10.0 de Node nvm use 10.10.0 # Utiliser la version la plus récente de Node nvm use node
Vous avez désormais accès à n'importe quelle version de Node !
Maintenant que NVM est en place, vous pouvez changer à n'importe quel moment votre version de Node. Encore faut-il se rappeler la version initial de ce projet...
NVM met à disposition dans sa documentation un script très pratique qui permet de passer sur la bonne version de Node dès que vous changez de dossier dans votre terminal. Ajoutez ce bout de code dans le fichier .zshrc
autoload -U add-zsh-hook load-nvmrc() { local node_version="$(nvm version)" local nvmrc_path="$(nvm_find_nvmrc)" if [ -n "$nvmrc_path" ]; then local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")") if [ "$nvmrc_node_version" = "N/A" ]; then nvm install elif [ "$nvmrc_node_version" != "$node_version" ]; then nvm use fi elif [ "$node_version" != "$(nvm version default)" ]; then echo "Reverting to nvm default version" nvm use default fi } add-zsh-hook chpwd load-nvmrc load-nvmrc
Lorsque vous démarrez un nouveau projet, vous pouvez maintenant exécuter la commande suivante qui créera un fichier .nvmrc à la racine de votre projet avec la version courante de Node.
node -v > .nvmrc
Vous n'aurez désormais plus à vous soucier de la version de Node utilisée !
L'avantage, c'est que vous pouvez porter ce fonctionnement à tous les développeurs qui travaillent sur votre projet pour vous assurer que tout le monde utilise bien la même version de Node. Mais également sur votre plateforme de CI/CD.
Chez WebLogin, nous utilisons la plateforme CircleCI pour tester en continu nos projets et les déployer sur les serveurs de test et de production. Nous souhaitons donc que CircleCI utilise la même version de Node que nous pour compiler les assets, pour cela nous utilisons la configuration suivante sur CircleCI.
- run: name: Install nvm command: | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install - run: name: Install npm dependencies command: | npm ci
Nous nous assurons ainsi que les versions de Node et NPM sont toujours respectées et que CircleCI ne cassera pas les tests et le déploiement en les mettant à jour de manière inopinée.