Aller au contenu

Fondamentaux

Comprendre pourquoi gérer plusieurs versions de runtimes est essentiel et comment les outils modernes résolvent ce problème.


Le problème des versions multiples

Un développeur travaille souvent sur plusieurs projets simultanément :

Projet Node Python Go
API legacy 18 LTS 3.9
Frontend actuel 20 LTS
Microservice 3.12 1.22
Script d'infra 3.11

Sans outil de gestion, les conflits sont inevitables :

  • node --version retourne une seule version pour tout le système
  • Mettre a jour Node pour un projet casse l'autre
  • Les dependances natives compilees contre une version ne fonctionnent pas avec une autre

L'approche : isolation par projet

La solution est de lier une version de chaque runtime a un projet :

projet-a/
├── .tool-versions ← node 20.11.0, python 3.12.1
└── src/

projet-b/
├── .tool-versions ← node 18.19.0, python 3.9.18
└── src/

Quand vous entrez dans projet-a/, node --version retourne 20.11.0. Quand vous entrez dans projet-b/, il retourne 18.19.0. Automatiquement.

Le fichier .tool-versions

Format standard cree par asdf et repris par mise :

# .tool-versions
node 20.11.0
python 3.12.1
golang 1.22.0

Chaque ligne : <outil> <version>. Le fichier est commite dans Git — toute l'équipe utilise les mêmes versions.

Le fichier mise.toml

Format alternatif propre a mise, plus expressif :

# mise.toml
[tools]
node = "20.11.0"
python = "3.12.1"
golang = "1.22.0"

[env]
DATABASE_URL = "postgres://localhost:5432/mydb"

Les deux formats sont supportes par mise. .tool-versions est plus portable (compatible asdf), mise.toml offre plus de fonctionnalités.

Relation avec les gestionnaires natifs

Outil Langages Approche
nvm Node uniquement Variables d'environnement, .nvmrc
pyenv Python uniquement Shims, .python-version
sdkman JVM (Java, Kotlin, Scala) Script shell, .sdkmanrc
rbenv Ruby uniquement Shims, .ruby-version
asdf Tous (via plugins) Shims, .tool-versions
mise Tous (compatible asdf) PATH manipulation, .tool-versions ou mise.toml

Les gestionnaires natifs (nvm, pyenv) fonctionnent bien pour un seul langage. Dès que vous travaillez avec 2+ langages, un outil unifie (mise ou asdf) simplifie la gestion.

Concepts cles

Concept Définition
Runtime Interpreteur ou compilateur d'un langage (node, python, go...)
Shim Script intermédiaire qui redirige vers la bonne version
Plugin Module qui enseigne a mise/asdf comment installer un outil
Version globale Version par defaut quand aucun .tool-versions n'est present
Version locale Version spécifique a un répertoire (prioritaire)
Trust Autorisation explicite d'utiliser un .tool-versions ou mise.toml