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 dopackage.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. Paranode
, a resposta deve ter o mesmo formato queindex
, garantindo que a versão mais recente seja o primeiro elemento da lista. Parayarn
, 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
é:
{
"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
ouwin
dependendo do sistema operacional.será substituído por
x86
oux64
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.