Хуки
По умолчанию Volta получает Node, npm и Yarn из публичных источников и реестров (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Однако в зависимости от вашей среды может потребоваться указать Volta загружать из разных источников (например, npm Enterprise для внутренних инструментов). Чтобы обеспечить это, Volta предоставляет хуки в процессе загрузки.
Где указывать хуки
Хуки всегда устанавливаются в файле с именем hooks.json. Этот файл может находиться в одном из двух мест, в зависимости от области действия, которую вы хотите иметь для этих хуков:
- Хуки, указанные в директории Volta (
~/.volta/hooks.jsonв Linux/MacOS,%LOCALAPPDATA%\Volta\hooks.jsonв Windows), будут применяться ко всей системе. - Хуки, указанные в поддиректории
.voltaпроекта (<PROJECT ROOT>/.volta/hooks.json), будут применяться только внутри этого проекта. Здесь<PROJECT ROOT>определяется как местоположениеpackage.jsonэтого проекта.
Формат файла хуков
Содержимое hooks.json должно быть объектом, предоставляющим необязательные ключи для каждого типа инструмента (в настоящее время node, npm и yarn). Каждый инструмент имеет 3 операции, к каждой из которых можно применить хуки:
indexпредставляет URL для определения списка версий этого инструмента, доступных для загрузки. Ответ при доступе к этому URL должен соответствовать формату публичного индекса для выбранного инструмента.latestпредставляет URL для определения последней версии этого инструмента. Дляnodeответ должен быть в том же формате, что иindex, убедившись, что последняя версия является первым элементом в списке. Дляyarnответ должен быть просто строкой номера версии, ничего больше.distroпредставляет URL для загрузки двоичных файлов инструмента.
Наконец, каждая операция имеет 3 возможных хука (описанных ниже), которые можно использовать (только один может быть указан для каждой операции за раз). Пример файла hooks.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"
}
}
}Типы хуков
Хук prefix
Хук prefix - это прямая замена URL. URL будет построен с использованием указанного префикса, за которым следует публичное имя файла для этой операции. Например, используя hooks.json выше, мы указали хук prefix для определения последней версии yarn. По умолчанию Volta будет получать последнюю версию, запрашивая https://yarnpkg.com/latest-version. С хуком Volta попытается получить доступ к http://example.com/yarnpkg/latest-version, добавив latest-version к указанному префиксу http://example.com/yarnpkg/.
Хук template
Хук template позволяет указать шаблон для URL с заполнителями, которые будут заменены. Доступные заполнители:
будет заменён наdarwin,linuxилиwinв зависимости от операционной системы.будет заменён наx86илиx64в зависимости от архитектуры системы.(доступен только для операцииdistro) будет заменён на конкретную версию инструмента, которую Volta пытается загрузить.будет заменён на имя файла, который Volta загрузил бы из публичного реестра.(доступен только для операцииdistro) будет заменён на расширение файла, которое Volta ожидает загрузить.
TIP
Замены filename и ext доступны только в Volta 0.8.4 или выше
Используя хук node.distro из примера выше, при получении node@10.15.3 в 64-битной системе Linux, Volta попытается загрузить tarball из: http://example.com/linux/x64/node-10.15.3.tar.gz
Хук bin
Хук bin - это универсальный хук, который вызовет внешний скрипт для определения URL. Значение - это путь к исполняемому скрипту, который будет вызван, и URL будет прочитан из stdout этого скрипта. stderr скрипта будет показан пользователю, поэтому при необходимости может использоваться для отображения индикаторов прогресса или счётчиков ожидания. Если путь к скрипту относительный, то он будет разрешён относительно файла hooks.json, который его указывает. В этом случае относительный путь означает путь, начинающийся с ./ или ../ в Linux/MacOS, или с .\ или ..\ в Windows. Наконец, для хуков операции distro запрошенная версия инструмента будет передана как первый аргумент этому скрипту.
Используя хук yarn.distro из примера hooks.json, при получении yarn@1.13.0, Volta вызовет ~/yarn-distro "1.13.0" и попытается загрузить tarball с URL, возвращённого этим хуком.