Geschrieben von Rosario De Chiara✏️
mise und asdf sind Tools, die Entwicklern bei der Verwaltung mehrerer Versionen von Programmiersprachen und -umgebungen helfen sollen. Beide Tools zielen darauf ab, die polyglotte Entwicklung zu vereinfachen, indem sie die Verwaltung und den Wechsel zwischen Tool-Versionen erleichtern, was bei der Arbeit mit verschiedenen Programmiersprachen und Frameworks eine häufige Herausforderung darstellt.
asdf ist ein beliebter Versionsmanager, der eine Technik namens „Shimming“ verwendet, um zwischen verschiedenen Versionen von Tools wie Python, Node.js und Ruby zu wechseln. Es erstellt temporäre Pfade zu bestimmten Versionen und ändert die Umgebung, um sicherzustellen, dass in verschiedenen Projekten die richtige Version eines Tools verwendet wird. Allerdings kann diese Methode aufgrund der Funktionsweise dieser Shims zu Leistungseinbußen führen.
mise, kurz für den französischen Ausdruck „mise-en-place“, womit man einen Tisch vorbereitet, zielt darauf ab, asdf zu verbessern, indem die Abhängigkeit von Unterlegscheiben entfällt.
Mise ist in Rust geschrieben und ändert direkt die Umgebungsvariable PATH, was zu schnelleren Ausführungszeiten führt. Es ist so konzipiert, dass es nahtlos mit ASDF-Plugins zusammenarbeitet, bietet aber Funktionen wie Fuzzy-Matching von Befehlen und die Möglichkeit, mehrere Versionen desselben Tools gleichzeitig zu installieren.
Um asdf zu installieren, folgen Sie der Anleitung „Erste Schritte“, um die Voraussetzungen für Ihr System zu installieren. Sobald die Umgebung bereit ist, können Sie das offizielle Repository in Ihrem Home-Verzeichnis klonen:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
Der obige Befehl klont alle Skript- und Konfigurationsdateien, die zum Abschluss der Installation erforderlich sind, in das .asdf-Verzeichnis.
Der nächste Schritt aus der Installationsanleitung oben besteht darin, das Installationsskript auszuführen. Auch dieser Schritt hängt von den Details Ihrer Umgebung und Ihres Betriebssystems ab. Befolgen Sie daher einfach die Anleitung, um den richtigen Skriptaufruf in Ihrem Shell-Initialisierungsskript hinzuzufügen (z. B. .bashrc, .bash_profile usw.). Am Ende dieses Vorgangs und normalerweise nach dem Neustart Ihrer Shell sollten Sie asdf als Befehl ausführen können:
An diesem Punkt läuft asdf, aber um damit etwas Nützliches zu machen, müssen Sie die Plugins installieren, um das Tool (im asdf-Sprachgebrauch) zu verwalten, die für das Projekt relevant sind, das Sie entwickeln möchten (z. B. Node.js, Python usw.).
Dazu installieren wir das Plugin für Node.js. In asdf ist ein Plugin der Code, mit dem Sie verschiedene Versionen eines Frameworks oder einer Bibliothek jonglieren können. In diesem Fall installieren wir das Node.js-Plugin und dann einige Versionen von Node.js, um zu verstehen, wie asdf damit umgeht.
Wir installieren das Node.js-Plugin mit dem folgenden Code:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
Bitte beachten Sie, dass Sie das Git-Repository, das den Plugin-Quellcode enthält, explizit ansprechen müssen. Sobald das Plugin installiert ist, können Sie es verwenden, um bestimmte Versionen von Node.js mit dem folgenden Befehl zu installieren:
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
In diesem Beispiel installieren Sie die neueste Version, die zum Zeitpunkt des Schreibens 23.1.0 ist. Mit dem folgenden Befehl installieren Sie eine bestimmte Version von Node.js:
$ asdf install nodejs latest
Um zu überprüfen, ob beide in Ihrem System verfügbar sind, verwenden Sie Folgendes:
$ asdf install nodejs 20.0.0
Um die zu verwendende Version von Node.js auszuwählen, verwenden Sie den folgenden Befehl:
$ asdf shim-versions node nodejs 20.0.0 nodejs 23.1.0
asdf verarbeitet die verschiedenen Versionen eines Tools, indem es eine Datei mit dem Namen [.tool-versions](https://asdf-vm.com/manage/configuration.html#tool-versions) mit dem folgenden Format füllt:
$ asdf global nodejs 20.0.0 $ node --version v20.0.0 $ asdf global nodejs 23.1.0 $ node --version v23.1.0
Die Datei .tool-versions wird von asdf automatisch mit dem Befehl manipuliert, um anzugeben, welche Version einer bestimmten Version Sie verwenden möchten, wie wir es oben mit Node.js Version 20.0.0 getan haben. Abhängig vom globalen, Shell- und lokalen Parameter fügen wir die Versionen eines Tools zu einer bestimmten .tool-versions-Datei hinzu, was unterschiedliche Auswirkungen auf Ihre Umgebung hat. Im Folgenden wird die Auswirkung der Parameter erläutert, falls wir Node.js Version 20.0.0 installieren:
ruby 2.5.3 nodejs 10.15.0
Mit dem ersten Befehl weisen wir asdf an, Version 20.0.0 im Home-Verzeichnis zu verwenden, und node --version bestätigt die Version. Dann erstellen wir ein Verzeichnis mit dem Namen test. Im Test führen wir asdf aus und geben eine andere Version für Node (Version 23.1.0) an. Auch hier bestätigt node --version, dass wir Version 23.1.0 verwenden. Wenn Sie schließlich zum Home-Verzeichnis zurückkehren, können Sie sehen, dass die Version von Node.js lokal immer noch 20.0.0 ist.
Da wir nun asdf auf unserem System haben, lernen wir, was ein Shim ist und warum es bei der Arbeit mit asdf wichtig ist.
In der Informatik ist ein Shim eine Möglichkeit, Befehle (z. B. den Aufruf von Bibliotheksmethoden) transparent zwischen verschiedenen Versionen umzuleiten. Der Schlüssel hier ist das Wort „transparent“. Die ganze Idee von asdf besteht darin, dem Benutzer zu ermöglichen, auf transparente Weise zu ändern, was wirklich aufgerufen wird, wenn Sie beispielsweise Node, Python oder ein anderes Paket schreiben. Der Benutzer gibt weiterhin Node oder Python ein, aber asdf hat einen anderen Pfad – einen Shim – zur richtigen Version eingerichtet, je nachdem, was in der Datei .tool-versions geschrieben steht.
Ein Plugin ist lediglich eine Reihe cleverer Shell-Skripte, mit denen asdf die richtige Version eines bestimmten Befehls auswählen kann (überprüfen Sie beispielsweise das Node.js-Plugin). Die Befehle im bin-Verzeichnis implementieren lediglich, was asdf ausführen muss, wenn Sie das Node.js-Plugin verwenden, um eine neue Version zu installieren, eine bestimmte Version zur Verwendung auszuwählen usw.
Der Prozess der Installation von Mise ist im Vergleich zu ASDF einfacher, da Sie kein Git-Repository klonen müssen:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
Die Aktivierungsanleitung ist ziemlich einfach; Sobald Sie den obigen Befehl ausführen und Ihre Shell neu starten, können Sie Folgendes ausführen:
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Hier wird der Status Ihrer Installation angezeigt. Sobald Mise installiert ist, müssen Sie es möglicherweise mit dem Befehl [mise activate](https://mise.jdx.dev/cli/activate.html) aktivieren.
An diesem Punkt steht der Mise-Befehl für die häufigste Aufgabe zur Verfügung: die Installation einer bestimmten Version eines Frameworks, um es global für das System verfügbar zu machen:
$ asdf install nodejs latest
Wir gehen von einer Situation aus, in der sich die ausführbare Knotendatei nicht im System befindet. Mit dem Mise-Befehl installieren wir eine bestimmte Knotenversion global, um sie verfügbar zu machen. Um die Versionen der aktuell installierten Tools zu überprüfen, können Sie den folgenden Befehl verwenden:
$ asdf install nodejs 20.0.0
Im obigen Befehl sehen Sie das im Feld oben installierte Node-Tool und eine Python-Version.
Das Mise-Framework verwendet denselben ASDF-Mechanismus, um die unterschiedlichen Konfigurationen von Tools im gesamten System und in bestimmten Verzeichnissen zu verwalten. Die Rolle der .tool-versions-Datei in asdf übernimmt die Datei mise.toml, die die Konfigurationen sammelt.
In mise gibt es kein Konzept, das den asdf-Plugins ähnelt, und das ist gut so, denn in asdf ist die Installation einer bestimmten Version eines Tools – sagen wir node@20.0.0 – ein zweistufiger Prozess ( Installieren Sie zuerst das Node.js-Plugin und dann die jeweilige Version von Node. Bei Mise befassen Sie sich einfach mit der einzelnen Version des Tools, die Sie benötigen, und Mise übernimmt im Hintergrund die ganze schwere Arbeit der Konfiguration für Sie. In den folgenden beiden Feldern können Sie sehen, wie die asdf-Befehle in mise:
übersetzt werden
$ asdf shim-versions node nodejs 20.0.0 nodejs 23.1.0
Im Grunde kann dies alles in einem einzigen Schritt erledigt werden, der das Plugin und die Laufzeit installiert und die Version festlegt:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
Die allgemeine Ausführlichkeit von asdf wird elegant durch den syntaktischen Zucker von mise gelöst. Dennoch unterscheidet sich Mise in der Art und Weise, wie es mit den verschiedenen Versionen umgeht, was einen größeren Einfluss auf das Gesamterlebnis hat. Im folgenden Bild stellen wir dar, was passiert, wenn Sie einen Knotenbefehl in einer Umgebung ausführen, in der asdf funktioniert:
Dieser Vorgang wirkt sich natürlich auf die Zeit aus, die zum Ausführen eines Befehls erforderlich ist. Andererseits löst Mise das gleiche Problem der Auswahl des richtigen Tools je nach Konfiguration, indem es einen anderen Mechanismus nutzt: die PATH-Variable, den nativen Mechanismus des Betriebssystems zum Ausführen eines Befehls.
Die Leistungen sind identisch mit der Ausführung des Befehls (z. B. Knoten) ohne Verwendung von Mise. Der Neugier halber: Mise funktioniert im Vergleich zu asdf anders: Mise verfolgt jede Änderung des Verzeichnisses, sodass Mise einen internen Hook aufruft, um die PATH-Variable zu aktualisieren, wenn der Benutzer das Verzeichnis ändert. Dieser Hook ist sehr effizient, da er in Rust geschrieben ist und die PATH-Variable im laufenden Betrieb einrichtet, um Ihre Umgebung zu konfigurieren.
Sowohl asdf als auch mise verwalten effektiv mehrere Toolversionen, jede mit einzigartigen Mechanismen. mise zeichnet sich dank seines PATH-Hook-Mechanismus durch Effizienz aus, während asdf eine breitere Werkzeugkompatibilität bietet, allerdings mit dem Leistungseinbußen seines Shim-Mechanismus. Die Kompatibilität von Mise mit ASDF-Plugins schließt die Lücke zwischen den Tools.
Unabhängig davon, ob Geschwindigkeit oder Auswahl im Vordergrund stehen, ermöglichen beide Tools Entwicklern die einfache Verwaltung ihrer Umgebungen und bieten ein florierendes Ökosystem für verschiedene Pakete und Tools.
NPM:
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Skript-Tag:
$ asdf install nodejs latest
3. (Optional) Installieren Sie Plugins für tiefere Integrationen mit Ihrem Stack:
Jetzt loslegen.
Das obige ist der detaillierte Inhalt vonmise vs. asdf für die Verwaltung der JavaScript-Projektumgebung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!