Skip to content

Hooks

Por padrão, o Volta obtém Node, npm e Yarn de fontes e registros públicos (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). No entanto, dependendo do seu ambiente, pode ser necessário informar ao Volta para baixar de fontes diferentes (por exemplo, para npm Enterprise com ferramentas internas). Para acomodar essas situações, o Volta fornece hooks durante o processo de download.

Onde Especificar Hooks

Os hooks são sempre configurados em um arquivo chamado hooks.json. Este arquivo pode estar em um de dois locais, dependendo do escopo que você deseja que esses hooks tenham:

  • Hooks especificados no diretório Volta (Linux/MacOS: ~/.volta/hooks.json, Windows: %LOCALAPPDATA%\Volta\hooks.json) serão aplicados em todo o sistema.
  • Hooks especificados no subdiretório .volta de um projeto (<PROJECT ROOT>/.volta/hooks.json) serão aplicados apenas dentro desse projeto. Aqui, <PROJECT ROOT> é definido como o local do package.json desse projeto.

Formato do Arquivo de Hooks

O conteúdo de hooks.json deve ser um objeto que fornece chaves opcionais para cada tipo de ferramenta (atualmente node, npm e yarn). Cada ferramenta tem 3 operações, e cada operação pode ter um hook aplicado:

  • index representa a URL usada para determinar a lista de versões disponíveis para download dessa ferramenta. A resposta ao acessar essa URL deve corresponder ao formato de índice público da ferramenta selecionada.
  • latest representa a URL usada para determinar a versão mais recente dessa ferramenta. Para node, a resposta deve ter o mesmo formato que index, garantindo que a versão mais recente seja o primeiro elemento da lista. Para yarn, a resposta deve ser uma string de versão bruta, nada mais.
  • distro representa a URL usada para baixar os arquivos binários da ferramenta.

Finalmente, cada operação tem 3 hooks possíveis (descritos abaixo) que podem ser usados (apenas um pode ser especificado por operação por vez). Um exemplo de arquivo 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"
        }
    }
}

Tipos de Hooks

Hook prefix

O hook prefix é uma substituição direta de URL. A URL será construída usando o prefixo especificado, seguido pelo nome de arquivo público para essa operação. Por exemplo, usando o hooks.json acima, especificamos um hook prefix para determinar a versão mais recente do yarn. Por padrão, o Volta obteria a versão mais recente fazendo uma requisição para https://yarnpkg.com/latest-version. Com o hook, o Volta tentará acessar http://example.com/yarnpkg/latest-version, anexando latest-version ao prefixo especificado http://example.com/yarnpkg/.

Hook template

O hook template permite que você especifique um template de URL que contém curingas que serão substituídos. Os curingas disponíveis são:

  • será substituído por darwin, linux ou win dependendo do sistema operacional.
  • será substituído por x86 ou x64 dependendo da arquitetura do sistema.
  • (disponível apenas para operação distro) será substituído pela versão específica da ferramenta que o Volta está tentando baixar.
  • será substituído pelo nome do arquivo que o Volta baixaria do registro público.
  • (disponível apenas para operação distro) será substituído pela extensão do arquivo que o Volta espera baixar.

TIP

As substituições filename e ext estão disponíveis apenas no Volta 0.8.4 ou superior

Usando o hook node.distro do exemplo acima, ao obter node@10.15.3 em um sistema Linux de 64 bits, o Volta tentará baixar o tarball de: http://example.com/linux/x64/node-10.15.3.tar.gz

Hook bin

O hook bin é um hook genérico que chamará um script externo para determinar a URL. O valor é o caminho para o script executável que será chamado, e a URL será lida do stdout desse script. O stderr do script será exibido ao usuário, então pode ser usado para mostrar barras de progresso ou spinners de espera se necessário. Se o caminho do script for relativo, então será resolvido em relação ao arquivo hooks.json que o especifica. Neste caso, caminho relativo significa que o caminho começa com ./ ou ../ no Linux/MacOS, ou .\ ou ..\ no Windows. Finalmente, para hooks de operação distro, a versão da ferramenta solicitada será passada como primeiro argumento para esse script.

Usando o hook yarn.distro do exemplo hooks.json, ao obter yarn@1.13.0, o Volta chamará ~/yarn-distro "1.13.0" e tentará baixar o tarball da URL retornada por esse hook.