Хуки
По умолчанию 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, возвращённого этим хуком.