Skip to content

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 du package.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. Pour node, la réponse doit être dans le même format que index, s'assurant que la dernière version est le premier élément de la liste. Pour yarn, 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 :

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"
        }
    }
}

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, ou win selon le système d'exploitation.
  • sera remplacé par x86 ou x64 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.