Une agence qui maintient à la fois un vieux projet WordPress figé en PHP 7.4 avec un thème utilisant encore Node 12 pour son build Gulp, et un nouveau projet démarré en PHP 8.0 avec Node 16 pour Vite, se retrouve vite face à un vrai casse-tête : changer de version manuellement à chaque fois qu’on passe d’un dossier à l’autre est une source d’erreurs et de perte de temps. Un build qui échoue silencieusement parce que la mauvaise version de Node est active est une des pannes les plus frustrantes à diagnostiquer, car le message d’erreur ne pointe presque jamais vers la cause réelle.
Deux outils répondent à ce besoin de bascule automatique : nvm, spécialisé sur Node, très largement adopté, et asdf, plus généraliste, capable de gérer PHP, Node, Ruby ou Python avec le même mécanisme de plugins.
Le principe commun : un fichier par projet
Les deux outils reposent sur la même idée : un fichier texte à la racine du projet déclare la version attendue, et l’outil bascule automatiquement dessus dès qu’on entre dans le dossier (à condition d’avoir configuré le hook du shell correspondant).
nvm : simple et suffisant pour Node seul

Avec nvm, un fichier .nvmrc à la racine du projet suffit :
echo "16.14.0" > .nvmrc
nvm use
Avec un hook ajouté dans le fichier de configuration du shell (.zshrc ou .bashrc), la bascule devient automatique à chaque changement de dossier :
cd() {
builtin cd "$@"
if [ -f .nvmrc ]; then
nvm use
fi
}
nvm reste l’outil le plus simple pour une équipe qui ne travaille que sur du JavaScript/Node et n’a pas besoin de gérer plusieurs versions de PHP en parallèle sur la même machine.
asdf : un seul outil pour PHP et Node
asdf fonctionne par plugins : un plugin par langage, chacun capable d’installer et de basculer entre plusieurs versions. L’installation des plugins PHP et Node se fait une seule fois par machine :
asdf plugin add php
asdf plugin add nodejs
asdf install php 8.0.8
asdf install nodejs 16.14.0
Le fichier de déclaration par projet, nommé .tool-versions, regroupe toutes les versions nécessaires en une seule fois :
php 8.0.8
nodejs 16.14.0
Dès qu’un terminal est ouvert dans un dossier contenant ce fichier, asdf bascule automatiquement les deux langages en même temps, sans configuration additionnelle par langage. C’est ce point qui fait la différence pour un projet WordPress : PHP et Node doivent souvent être alignés simultanément (une version de PHP pour l’exécution du thème, une version de Node pour son build), et un seul fichier suffit à fixer les deux.
Compilation de PHP : le point de friction
L’installation d’une version de PHP via asdf compile PHP depuis les sources sur la machine, ce qui nécessite d’avoir les bibliothèques de développement adéquates installées au préalable (libxml2-dev, libssl-dev, et autres selon le système). Cette étape peut prendre plusieurs minutes et échouer si une dépendance système manque, contrairement à Node qui installe des binaires précompilés quasi instantanément.
Tableau de décision
| Besoin | Outil recommandé |
|---|---|
| Uniquement Node, plusieurs projets JS | nvm |
| PHP et Node à basculer ensemble par projet | asdf |
| Équipe déjà habituée à un outil | Rester dessus plutôt que migrer sans raison |
Sur les projets mixtes anciens et récents, le fichier
.tool-versionsversionné avec le dépôt évite le fameux « ça marche chez moi » causé par une version de PHP ou de Node différente entre deux postes de l’équipe.
Ce que ces outils ne remplacent pas
Sur un serveur de production, la gestion des versions PHP relève de PHP-FPM et de la configuration système, pas de ces outils pensés pour un poste de développement. asdf et nvm couvrent le poste local, pas l’hébergement final du site.
Notre choix d’équipe
Pour une agence qui maintient à la fois d’anciens projets en PHP 7.4 et des projets récents en PHP 8, asdf a pris l’avantage grâce à son fichier unique couvrant PHP et Node simultanément. nvm garde tout son sens pour une équipe plus exclusivement front, ou pour qui n’a jamais besoin de changer de version PHP sur son poste. Le vrai gain, dans les deux cas, tient moins à l’outil choisi qu’à la discipline de versionner le fichier de déclaration avec chaque projet, pour que la bascule soit automatique pour toute l’équipe, pas seulement pour celui qui l’a configurée.