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 derpackage.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ürnode
sollte die Antwort im gleichen Format wieindex
sein und sicherstellen, dass die neueste Version das erste Element in der Liste ist. Füryarn
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:
{
"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
oderwin
ersetzt, abhängig vom Betriebssystem.wird durch
x86
oderx64
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.