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.jsonsur Linux/MacOS,%LOCALAPPDATA%\Volta\hooks.jsonsur Windows) s'appliqueront à l'ensemble du système. - Les hooks spécifiés dans le sous-répertoire
.voltad'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.jsonde 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 :
indexrepré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é.latestrepré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.distrorepré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é pardarwin,linux, ouwinselon le système d'exploitation.sera remplacé parx86oux64selon l'architecture du système.(disponible seulement pour les opérationsdistro) 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érationsdistro) 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.