Skip to content

Hooks

Standardmäßig lädt Volta Node, npm und Yarn von öffentlichen Quellen und Registries herunter (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Je nach Ihrer Umgebung kann es jedoch notwendig sein, Volta anzuweisen, stattdessen von einer anderen Quelle herunterzuladen (z.B. npm Enterprise für interne Tools). Um das zu ermöglichen, bietet Volta Hooks in den Download-Prozess.

Wo Hooks spezifiziert werden

Hooks werden immer in einer Datei namens hooks.json festgelegt. Diese Datei kann an einem von zwei Orten stehen, abhängig von dem Geltungsbereich, den Sie für diese Hooks wünschen:

  • Hooks, die im Volta-Verzeichnis spezifiziert sind (~/.volta/hooks.json unter Linux/MacOS, %LOCALAPPDATA%\Volta\hooks.json unter Windows), gelten für das gesamte System.
  • Hooks, die in einem .volta-Unterverzeichnis eines Projekts spezifiziert sind (<PROJEKT ROOT>/.volta/hooks.json), gelten nur innerhalb dieses Projekts. <PROJEKT ROOT> ist hier definiert als der Standort der package.json für dieses Projekt.

Format der Hooks-Datei

Der Inhalt von hooks.json muss ein Objekt sein, mit optionalen Schlüsseln für jeden Tool-Typ (derzeit node, npm und yarn). Jedes Tool hat 3 Aktionen, auf die jeweils ein Hook angewendet werden kann:

  • index Repräsentiert die URL, die verwendet wird, um die Liste der Versionen zu bestimmen, die für dieses Tool zum Download verfügbar sind. Die Antwort beim Zugriff auf diese URL muss dem Format der öffentlichen Indizes für das gewählte Tool entsprechen.
  • latest Repräsentiert die URL, die verwendet wird, um die neueste Version dieses Tools zu bestimmen. Für node sollte die Antwort im gleichen Format wie index sein und sicherstellen, dass die neueste Version das erste Element in der Liste ist. Für yarn sollte die Antwort der reine Versionsnummer-String und nichts anderes sein.
  • distro Repräsentiert die URL, die zum Herunterladen der Tool-Binärdateien verwendet wird.

Schließlich hat jede Aktion 3 mögliche Hooks (unten beschrieben), die verwendet werden können (von denen nur einer für jede Aktion gleichzeitig spezifiziert werden kann). Eine Beispiel-hooks.json-Datei ist:

json
{
    "node": {
        "index": {
            "bin": "/usr/local/node-lookup"
        },
        "latest": {
            "prefix": "http://example.com/node/"
        },
        "distro": {
            "template": "http://example.com/{{os}}/{{arch}}/node-{{version}}.tar.gz"
        }
    },
    "npm": {
        "index": {
            "prefix": "http://example.com/npm/"
        },
        "latest": {
            "bin": "~/npm-latest"
        },
        "distro": {
            "template": "http://example.com/npm/npm-{{version}}.tgz"
        }
    },
    "yarn": {
        "index": {
            "template": "http://example.com/yarn/{{os}}/{{arch}}/yarn-{{version}}.tgz"
        },
        "latest": {
            "prefix": "http://example.com/yarnpkg/"
        },
        "distro": {
            "bin": "~/yarn-distro"
        }
    }
}

Hook-Typen

prefix Hooks

Der prefix-Hook ist ein unkomplizierter URL-Ersatz. Die URL wird mit dem angegebenen Präfix erstellt, gefolgt vom öffentlichen Dateinamen für diese Aktion. Zum Beispiel haben wir mit der obigen hooks.json einen prefix-Hook spezifiziert, um die neueste Yarn-Version zu bestimmen. Standardmäßig würde Volta die neueste Version durch eine Anfrage an https://yarnpkg.com/latest-version abrufen. Mit dem Hook würde Volta stattdessen versuchen, auf http://example.com/yarnpkg/latest-version zuzugreifen und latest-version an das angegebene Präfix http://example.com/yarnpkg/ anhängen.

template Hooks

Der template-Hook ermöglicht es Ihnen, die Vorlage für eine URL zu spezifizieren, mit Platzhaltern, die ersetzt werden. Die verfügbaren Platzhalter sind:

  • wird durch darwin, linux oder win ersetzt, abhängig vom Betriebssystem.
  • wird durch x86 oder x64 ersetzt, abhängig von der Architektur des Systems.
  • (Nur verfügbar für distro-Aktionen) wird durch die spezifische Version des Tools ersetzt, das Volta herunterzuladen versucht.
  • wird durch den Dateinamen der Datei ersetzt, die Volta von der öffentlichen Registry herunterladen würde.
  • (Nur verfügbar für distro-Aktionen) wird durch die Dateierweiterung ersetzt, die Volta zu downloaden erwartet.

TIP

Die filename- und ext-Ersetzungen sind nur in Volta 0.8.4 oder später verfügbar

Mit dem node.distro-Hook aus dem obigen Beispiel würde Volta beim Abrufen von node@10.15.3 auf einem 64-Bit-Linux-System versuchen, das Tarball von herunterzuladen: http://example.com/linux/x64/node-10.15.3.tar.gz

bin Hooks

Der bin-Hook ist ein Allzweck-Hook, der ein externes Skript aufruft, um die URL zu bestimmen. Der Wert ist ein Pfad zu einem ausführbaren Skript, das aufgerufen wird, und die URL wird aus der stdout dieses Skripts gelesen. Die stderr des Skripts wird dem Benutzer angezeigt, sodass sie verwendet werden kann, um Fortschrittsbalken oder Wartespinner anzuzeigen, falls gewünscht. Wenn der Pfad zum Skript relativ ist, wird er relativ zur hooks.json-Datei aufgelöst, in der er spezifiziert ist. In diesem Kontext bedeutet ein relativer Pfad, dass der Pfad unter Linux/MacOS mit ./ oder ../ beginnt und unter Windows mit .\ oder ..\. Schließlich wird für distro-Aktions-Hooks die angeforderte Version des Tools als erstes Argument an dieses Skript übergeben.

Mit dem yarn.distro-Hook aus der Beispiel-hooks.json würde Volta beim Abrufen von yarn@1.13.0 ~/yarn-distro "1.13.0" aufrufen und versuchen, das Tarball von der URL herunterzuladen, die von diesem Hook zurückgegeben wird.