Skip to content

Хуки

По умолчанию 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:

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