nodejsnpmnvmzsh

Switcher de version node automatiquement

Certains de vos projets ont besoin de node version 14, et d'autres version 12. Et vous changez manuellement de version à chaque fois ?

Vous travaillez sur une application react-native qui fonctionne seulement sur node 12.22.0. Et de temps en temps vous switchez de projet pour passer à une application nodejs qui doit avoir pour version minimum la version 16.13.0.

Vous avez déjà heureusement installé (Node Version Manager, nvm)[https://github.com/nvm-sh/nvm]. Mais c’est quand même fatiguant de tout le temps saisir :

cd mon-projet-mobile
nvm use 12.22.0
...
cd mon-appli-node
nvm use 16.13.0

Vous êtes d’accord ?

C’est là qu’entre en jeu, le fichier .npmrc

Le fichier .npmrc, à la racine de votre projet, permet de définir la version qui node par défaut du projet.

Essayez :

node -v > .nvmrc

Cela va générer automatiquement un fichier nvmrc avec la version actuelle de votre node.

v12.22.0

Maintenant si vous vous rendez sur votre dossier, puis faites :

nvm use

La version de votre node va être automatiquement switché pour celle du projet. Pratique, mais pas assez car cela nécessite une étape manuelle.

Autoload avec .zshrc

Que vous utilisez zsh ou bash, vous pouvez rajouter quelques lignes de configuration afin de load automatiquement la version du .nvmrc local.

J’utilise zsh, donc la configuration suivante va être pour ceux qui l’utilisent aussi. Pour les autres, je vous laisse regarder (ce lien)[https://github.com/nvm-sh/nvm#deeper-shell-integration].

Ajoutez ce bloc de ligne juste après l’initalisation de .nvm :

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

Fermez vos terminals puis rouvrez-les, puis admirez le résultat !

Exemple animé

Maintenant votre version de node va automatiquement changé selon le dossier où vous vous trouvez ! Pratique !

Merci à @alexventuraio pour cette vidéo.