Retour au blog

NodeJS : comment charger la bonne version sur ses projets ?

Lors du développement d'un projet web, il y a de très fortes chances pour que NodeJS soit utilisé comme dépendance. Si c'est le cas, que vous soyez seul ou en équipe, il faut s'assurer que la version de NodeJS soit mentionnée et versionnée pour que tout le monde puisse l'utiliser.

Nous allons ici parler de NodeJS, mais le principe reste le même pour chaque langage et outils de chaque projet.

D'expérience, et encore plus lorsque l'on travaille à plusieurs, ne pas avoir de gestionnaire de version comporte plusieurs risques :

  • vous upgradez votre version actuelle et elle ne fonctionne plus sur les anciens projets ;
  • vous travaillez à plusieurs, l'un est encore sous Node 0.12 alors que l’autre est sur Node 9.

Les problèmes classiques

L'inconvénient le plus classique reste l'impossibilité d’installer les dépendances indiquées dans votre package.json. Ceci est probablement dû au fait que la version de NodeJS n'est pas supportée par le package ciblé ou vice versa. Par conséquent, il est impossible d'installer les dépendances du projet. C'est l'un des nombreux cas d'utilisation qui peuvent poser problème.

Utilisation du Node Version Manager

Pour rémédier à ce problème chez Novaway, on utilise Node Version Manager (NVM). Cet outil s'occupe de charger la bonne version de NodeJS sur nos projets. On évite ainsi les problèmes récurrents de build ou de dépendances entre les développeurs.

NVM fonctionne sur Linux et Mac. Vous pouvez télécharger ici Node Version Manager pour Windows.


curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

Une fois Node Version Manager installé, il suffit de créer un fichier .nvmrc à la racine de votre projet et de mentionner la version de NodeJS utilisée. Pensez à versionner le fichier.

Ensuite, il ne reste plus qu'à charger la version indiquée :


nvm use

Les commandes principales à retenir :

  • nvm install x.x.x  // installe une version spécifique
  • nvm install x  // installe la version la plus récente de la branche X
  • nvm use  // charge la version metionnée dans le fichier .nvmrc
  • nvm use x  // charge la version la plus récente de la branche X

Charger automatiquement la version de NodeJS

Pour les utilisateurs de bash, voici un script qui va s'occuper de charger automatiquement la version de NodeJS si un fichier .nvmrc est détecté :

 
OLD_PWD=""

promptCommand() {

    if [ "$OLD_PWD" != "$PWD" ] ;

        then

        OLD_PWD="$PWD"

        if [ -e .nvmrc ] ;

            then nvm use;

        fi

    fi

}

export PROMPT_COMMAND=promptCommand

Et pour les utilisateurs du fish shell, dans le fichier `~/.config/fish/config.fish` :


function nvm_prompt --on-variable PWD

    if [ "$OLD_PWD" != "$PWD" ]

        set -g OLD_PWD "$PWD"

        if [ -e .nvmrc ]

            bass source ~/.nvm/nvm.sh --no-use ';' nvm use

        end

    end

end

Notez l’utilisation de bass, NVM n’étant pas compatible de base avec fish.

Docker, l’autre solution

L'utilisation d'un container Docker pourrait également être une solution. Tout dépend de l'utilité de NodeJS dans votre projet : si c'est du build d'assets, NVM fera très bien le travail.

En revanche, s'il s'agit d'un projet avec une utilisation de NodeJS plus conséquente - avec, par exemple, un serveur NodeJS couplé avec Nginx - Docker est probablement la meilleure solution.