asdf remplace nvm, pyenv, rbenv et tous les gestionnaires de versions
spécifiques par un seul outil. Avec une commande unique (asdf install), vous
installez Node.js, Python, Go, Terraform, kubectl et plus de 700 outils. Le
fichier .tool-versions à la racine de chaque projet garantit que toute
l’équipe utilise exactement les mêmes versions. Fini les “ça marche sur ma
machine”.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre le fonctionnement d’asdf (plugins, shims, résolution de versions)
- Installer asdf sur Linux et macOS
- Gérer vos outils : installer, définir des versions globales et locales
- Synchroniser une équipe avec le fichier
.tool-versions - Migrer depuis nvm, pyenv ou rbenv
- Optimiser votre workflow avec les bonnes pratiques
Fonctionnement de asdf
Section intitulée « Fonctionnement de asdf »asdf repose sur trois concepts clés :
| Concept | Description | Exemple |
|---|---|---|
| Plugin | Extension pour gérer un outil spécifique | asdf-nodejs, asdf-python |
| Shim | Wrapper qui redirige vers la bonne version | ~/.asdf/shims/node |
| Version | Instance installée d’un outil | nodejs 22.13.1 |
Comment asdf choisit la version ? (ordre de priorité)
- Variable d’environnement
ASDF_<TOOL>_VERSION - Fichier
.tool-versionsdans le répertoire courant - Fichier
.tool-versionsdans les répertoires parents (remontée) - Fichier
~/.tool-versions(version globale)
Où sont stockés les outils ?
~/.asdf/├── installs/ # Versions installées│ ├── nodejs/│ │ └── 22.13.1/│ └── python/│ └── 3.12.8/├── plugins/ # Plugins installés├── shims/ # Wrappers (à ajouter au PATH)└── .tool-versions # Versions globalesInstallation de asdf
Section intitulée « Installation de asdf »-
Télécharger le binaire
Fenêtre de terminal wget https://github.com/asdf-vm/asdf/releases/download/v0.18.0/asdf-v0.18.0-linux-amd64.tar.gztar -xvzf asdf-v0.18.0-linux-amd64.tar.gz -C ${HOME}/.local/binchmod +x ${HOME}/.local/bin/asdf -
Configurer le shell (Bash)
Fenêtre de terminal echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.bashrcecho '. <(asdf completion bash)' >> ~/.bashrcsource ~/.bashrc -
Configurer le shell (Zsh)
Fenêtre de terminal echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.zshrcmkdir -p "${ASDF_DATA_DIR:-$HOME/.asdf}/completions"asdf completion zsh > "${ASDF_DATA_DIR:-$HOME/.asdf}/completions/_asdf"Ajoutez cette ligne avant
autoload -Uz compinit && compinit:Fenêtre de terminal fpath=(${ASDF_DATA_DIR:-$HOME/.asdf}/completions $fpath) -
Vérifier l’installation
Fenêtre de terminal asdf --versionRésultat attendu :
asdf version v0.18.0
-
Installer avec Homebrew
Fenêtre de terminal brew install asdf -
Configurer le shell (Zsh - défaut macOS)
Fenêtre de terminal echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrcsource ~/.zshrc -
Vérifier l’installation
Fenêtre de terminal asdf --version
Commandes essentielles
Section intitulée « Commandes essentielles »Gérer les plugins
Section intitulée « Gérer les plugins »# Lister les plugins disponibles (700+)asdf plugin list all | head -20
# Ajouter un pluginasdf plugin add nodejsasdf plugin add pythonasdf plugin add golangasdf plugin add terraform
# Lister les plugins installésasdf plugin list
# Mettre à jour un pluginasdf plugin update nodejs
# Mettre à jour tous les pluginsasdf plugin update --all
# Supprimer un pluginasdf plugin remove nodejsInstaller des versions
Section intitulée « Installer des versions »# Lister les versions disponiblesasdf list all nodejs | tail -10
# Installer une version spécifiqueasdf install nodejs 22.13.1asdf install python 3.12.8
# Installer la dernière version stableasdf install nodejs latest
# Lister les versions installéesasdf list nodejsDéfinir les versions actives
Section intitulée « Définir les versions actives »# Version globale (pour tout le système)asdf set --home nodejs 22.13.1
# Version locale (pour le projet courant)cd mon-projetasdf set nodejs 20.18.0
# Vérifier la version activeasdf current nodejs
# Vérifier toutes les versions activesasdf currentDésinstaller
Section intitulée « Désinstaller »# Désinstaller une versionasdf uninstall nodejs 20.18.0
# Supprimer un plugin (et toutes ses versions)asdf plugin remove nodejsSynchroniser une équipe avec .tool-versions
Section intitulée « Synchroniser une équipe avec .tool-versions »Le fichier .tool-versions est la clé pour garantir des environnements
identiques. Placez-le à la racine de votre projet et committez-le.
nodejs 22.13.1python 3.12.8terraform 1.9.8kubectl 1.31.4Workflow équipe :
-
Cloner le projet
Fenêtre de terminal git clone https://github.com/mon-org/mon-projet.gitcd mon-projet -
Installer les plugins nécessaires
Fenêtre de terminal # Script d'installation automatiquefor plugin in $(cut -d' ' -f1 .tool-versions); doasdf plugin add "$plugin" 2>/dev/null || truedone -
Installer toutes les versions
Fenêtre de terminal asdf installCette commande lit
.tool-versionset installe toutes les versions manquantes. -
Vérifier
Fenêtre de terminal asdf current
Astuces et bonnes pratiques
Section intitulée « Astuces et bonnes pratiques »Mettre à jour tous vos outils en une commande
Section intitulée « Mettre à jour tous vos outils en une commande »for tool in $(asdf plugin list); do latest=$(asdf latest "$tool" 2>/dev/null) if [[ -n "$latest" ]]; then asdf install "$tool" "$latest" \ && asdf set --home "$tool" "$latest" \ && echo "✅ $tool → $latest" fidoneVérifier les mises à jour disponibles
Section intitulée « Vérifier les mises à jour disponibles »asdf latest --allRésultat :
golang 1.23.5 installedhelm 3.17.1 missingk9s 0.32.7 missingnodejs 23.7.0 missingpython 3.13.2 missingCréer un alias pour les commandes fréquentes
Section intitulée « Créer un alias pour les commandes fréquentes »Ajoutez à votre .bashrc ou .zshrc :
# Installer la dernière version d'un outilalias asdf-latest='asdf install $1 latest && asdf set --home $1 latest'
# Nettoyer les anciennes versionsasdf-cleanup() { for plugin in $(asdf plugin list); do versions=$(asdf list "$plugin" 2>/dev/null | wc -l) if [[ $versions -gt 1 ]]; then echo "🧹 $plugin a $versions versions installées" fi done}Sauvegarder votre configuration globale
Section intitulée « Sauvegarder votre configuration globale »# Exporter vos versions globalescp ~/.tool-versions ~/dotfiles/.tool-versions
# Sur une nouvelle machinecp ~/dotfiles/.tool-versions ~/.tool-versionsfor plugin in $(cut -d' ' -f1 ~/.tool-versions); do asdf plugin add "$plugin"doneasdf installDéboguer les problèmes de version
Section intitulée « Déboguer les problèmes de version »# Voir quelle version est utilisée et pourquoiasdf current nodejs# → nodejs 22.13.1 /home/user/projet/.tool-versions
# Voir où est installé un outilasdf where nodejs 22.13.1# → /home/user/.asdf/installs/nodejs/22.13.1
# Vérifier le shimwhich node# → /home/user/.asdf/shims/nodeMigrer depuis d’autres gestionnaires
Section intitulée « Migrer depuis d’autres gestionnaires »Depuis nvm (Node.js)
Section intitulée « Depuis nvm (Node.js) »# 1. Exporter la version actuellenode_version=$(node --version | sed 's/v//')
# 2. Installer le plugin asdfasdf plugin add nodejs
# 3. Installer la même versionasdf install nodejs "$node_version"asdf set --home nodejs "$node_version"
# 4. Désinstaller nvmrm -rf ~/.nvm# Supprimer les lignes nvm de ~/.bashrc ou ~/.zshrcDepuis pyenv (Python)
Section intitulée « Depuis pyenv (Python) »# 1. Exporter la version actuellepython_version=$(python --version | cut -d' ' -f2)
# 2. Installer le plugin asdfasdf plugin add python
# 3. Installer la même versionasdf install python "$python_version"asdf set --home python "$python_version"
# 4. Désinstaller pyenvrm -rf ~/.pyenv# Supprimer les lignes pyenv de ~/.bashrc ou ~/.zshrcPlugins populaires DevOps
Section intitulée « Plugins populaires DevOps »| Plugin | Commande d’installation | Usage |
|---|---|---|
| nodejs | asdf plugin add nodejs | Runtime JavaScript |
| python | asdf plugin add python | Scripting, ML, automation |
| golang | asdf plugin add golang | CLI tools, microservices |
| terraform | asdf plugin add terraform | Infrastructure as Code |
| kubectl | asdf plugin add kubectl | Gestion Kubernetes |
| helm | asdf plugin add helm | Charts Kubernetes |
| awscli | asdf plugin add awscli | CLI Amazon Web Services |
| gcloud | asdf plugin add gcloud | CLI Google Cloud |
Dépannage
Section intitulée « Dépannage »Le shim ne trouve pas la bonne version
Section intitulée « Le shim ne trouve pas la bonne version »# Régénérer les shimsasdf reshim
# Vérifier que les shims sont dans le PATHecho $PATH | tr ':' '\n' | grep asdfErreur “No version set for command”
Section intitulée « Erreur “No version set for command” »# Définir une version globale par défautasdf set --home nodejs latestPlugin qui ne se met pas à jour
Section intitulée « Plugin qui ne se met pas à jour »# Erreur courante avec nodejs# /home/bob/.asdf/plugins/nodejs/bin/../lib/utils.sh: line 27: HOME: unbound variable
# Solution : mettre à jour le plugin manuellementasdf plugin remove nodejsasdf plugin add nodejsProblème de dépendances (Python, Ruby)
Section intitulée « Problème de dépendances (Python, Ruby) »Certains plugins nécessitent des dépendances système :
# Pour Python (compilation)sudo apt install build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev libffi-dev
# Pour Rubysudo apt install autoconf bison build-essential libssl-dev \ libyaml-dev libreadline-dev zlib1g-dev libncurses5-devÀ retenir
Section intitulée « À retenir »| Concept | Commande / Fichier |
|---|---|
| Ajouter un plugin | asdf plugin add <nom> |
| Installer une version | asdf install <nom> <version> |
| Version globale | asdf set --home <nom> <version> |
| Version locale (projet) | asdf set <nom> <version> |
| Fichier de config | .tool-versions |
| Voir la version active | asdf current |
Points clés :
- Un seul outil pour gérer tous vos runtimes et outils CLI
- Le fichier
.tool-versionssynchronise toute l’équipe - Priorité : local > parent > global
- Ne pas utiliser en CI/CD pour des raisons de sécurité