Hooks
Par défaut, Volta récupère Node, npm et Yarn depuis des sources et registres publics (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Cependant, selon votre environnement, il peut être nécessaire de dire à Volta de télécharger depuis des sources différentes (par exemple, npm Enterprise pour des outils internes). Pour accommoder cela, Volta fournit des hooks dans le processus de téléchargement.
Où spécifier les hooks
Les hooks sont toujours configurés dans un fichier nommé hooks.json
. Ce fichier peut être dans l'un de deux emplacements, selon la portée que vous voulez que ces hooks aient :
- Les hooks spécifiés dans le répertoire Volta (
~/.volta/hooks.json
sur Linux/MacOS,%LOCALAPPDATA%\Volta\hooks.json
sur Windows) s'appliqueront à l'ensemble du système. - Les hooks spécifiés dans le sous-répertoire
.volta
d'un projet (<PROJECT ROOT>/.volta/hooks.json
) s'appliqueront uniquement à l'intérieur de ce projet. Ici,<PROJECT ROOT>
est défini comme l'emplacement dupackage.json
de ce projet.
Format du fichier de hooks
Le contenu de hooks.json
doit être un objet, fournissant des clés optionnelles pour chaque type d'outil (actuellement node
, npm
et yarn
). Chaque outil a 3 opérations, chacune pouvant avoir des hooks appliqués :
index
représente l'URL utilisée pour déterminer la liste des versions de cet outil disponibles au téléchargement. La réponse lors de l'accès à cette URL doit correspondre au format d'index public de l'outil sélectionné.latest
représente l'URL utilisée pour déterminer la dernière version de cet outil. Pournode
, la réponse doit être dans le même format queindex
, s'assurant que la dernière version est le premier élément de la liste. Pouryarn
, la réponse doit être une chaîne de numéro de version brute, rien de plus.distro
représente l'URL utilisée pour télécharger les binaires de l'outil.
Enfin, chaque opération a 3 hooks possibles (décrits ci-dessous) qui peuvent être utilisés (seulement un peut être spécifié par opération à la fois). Un exemple de fichier hooks.json
est :
{
"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"
}
}
}
Types de hooks
Hook prefix
Le hook prefix
est un remplacement d'URL direct. L'URL sera construite en utilisant le préfixe spécifié, suivi du nom de fichier public pour cette opération. Par exemple, en utilisant le hooks.json
ci-dessus, nous avons spécifié un hook prefix
pour déterminer la dernière version de yarn. Par défaut, Volta obtiendrait la dernière version en demandant https://yarnpkg.com/latest-version
. Avec le hook, Volta essaiera d'accéder à http://example.com/yarnpkg/latest-version
, en ajoutant latest-version
au préfixe spécifié http://example.com/yarnpkg/
.
Hook template
Le hook template
vous permet de spécifier un modèle pour l'URL, avec des jokers qui seront remplacés. Les jokers disponibles sont :
sera remplacé par
darwin
,linux
, ouwin
selon le système d'exploitation.sera remplacé par
x86
oux64
selon l'architecture du système.(disponible seulement pour les opérations
distro
) sera remplacé par la version spécifique de l'outil que Volta essaie de télécharger.sera remplacé par le nom de fichier du fichier que Volta téléchargerait depuis le registre public.
(disponible seulement pour les opérations
distro
) sera remplacé par l'extension de fichier que Volta s'attend à télécharger.
TIP
Les remplacements filename
et ext
ne sont disponibles que dans Volta 0.8.4 ou plus récent
En utilisant le hook node.distro
de l'exemple ci-dessus, lors de la récupération de node@10.15.3
sur un système Linux 64-bit, Volta essaiera de télécharger le tarball depuis : http://example.com/linux/x64/node-10.15.3.tar.gz
Hook bin
Le hook bin
est un hook générique qui invoquera un script externe pour déterminer l'URL. La valeur est le chemin vers un script exécutable qui sera invoqué, et l'URL sera lue depuis la stdout
de ce script. La stderr
du script sera affichée à l'utilisateur, elle peut donc être utilisée pour afficher des barres de progression ou des spinners d'attente si nécessaire. Si le chemin du script est relatif, alors il sera résolu relativement au fichier hooks.json
qui le spécifie. Dans ce contexte, un chemin relatif signifie un chemin qui commence par ./
ou ../
sur Linux/MacOS, et .\
ou ..\
sur Windows. Enfin, pour les hooks d'opération distro
, la version de l'outil demandé sera passée comme premier argument à ce script.
En utilisant le hook yarn.distro
de l'exemple hooks.json
, lors de la récupération de yarn@1.13.0
, Volta invoquera ~/yarn-distro "1.13.0"
et essaiera de télécharger le tarball depuis l'URL retournée par ce hook.