Hooks
Por defecto, Volta obtiene Node, npm y Yarn de fuentes y registros públicos (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Sin embargo, dependiendo de tu entorno, puede ser necesario decirle a Volta que descargue desde una fuente diferente (ej. npm Enterprise para herramientas internas). Para acomodar eso, Volta proporciona hooks en el proceso de descarga.
Dónde especificar hooks
Los hooks siempre se establecen en un archivo llamado hooks.json
. Este archivo puede estar en uno de dos lugares, dependiendo del ámbito que quieras que tengan esos hooks:
- Los hooks especificados en el directorio de Volta (
~/.volta/hooks.json
en Linux/MacOS,%LOCALAPPDATA%\Volta\hooks.json
en Windows) se aplicarán a través de todo el sistema. - Los hooks especificados en un subdirectorio
.volta
de un proyecto (<PROJECT ROOT>/.volta/hooks.json
) solo se aplicarán dentro de ese proyecto.<PROJECT ROOT>
aquí se define como la ubicación delpackage.json
para ese proyecto.
Formato del archivo de hooks
Los contenidos de hooks.json
deben ser un objeto, con claves opcionales para cada tipo de herramienta (actualmente node
, npm
y yarn
). Cada herramienta tiene 3 acciones que pueden tener un hook aplicado a ellas:
index
Representa la URL usada para determinar la lista de versiones que están disponibles para descargar para esa herramienta. La respuesta al acceder a esa URL debe coincidir con el formato de los índices públicos para la herramienta seleccionada.latest
Representa la URL usada para determinar la última versión de esa herramienta. Paranode
, la respuesta debería estar en el mismo formato queindex
, asegurándose de que la última versión sea el primer elemento en la lista. Parayarn
, la respuesta debería ser la cadena de número de versión cruda y nada más.distro
Representa la URL que se usa para descargar los binarios de la herramienta.
Finalmente, cada acción tiene 3 hooks posibles (descritos abajo) que pueden ser usados (solo uno de los cuales puede ser especificado para cada acción en cualquier momento). Un archivo hooks.json
de ejemplo es:
{
"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
Hooks prefix
El hook prefix
es un reemplazo directo de URL. La URL se construirá usando el prefijo especificado, seguido por el nombre de archivo público para esa acción. Por ejemplo, usando el hooks.json
de arriba, tenemos un hook prefix
especificado para determinar la última versión de yarn. Por defecto, Volta obtendría la última versión haciendo una solicitud a https://yarnpkg.com/latest-version
. Usando el hook, Volta intentaría acceder a http://example.com/yarnpkg/latest-version
, añadiendo latest-version
al prefijo especificado de http://example.com/yarnpkg/
.
Hooks template
El hook template
te permite especificar la plantilla para una URL, con comodines que serán reemplazados. Los comodines disponibles son:
será reemplazado por
darwin
,linux
owin
, dependiendo del sistema operativo.será reemplazado por
x86
ox64
, dependiendo de la arquitectura del sistema.(Solo disponible para acciones
distro
) será reemplazado por la versión específica de la herramienta que Volta está tratando de descargar.será reemplazado por el nombre del archivo que Volta descargaría del registro público.
(Solo disponible para acciones
distro
) será reemplazado por la extensión de archivo que Volta espera descargar.
TIP
Los reemplazos filename
y ext
solo están disponibles en Volta 0.8.4 o posterior
Usando el hook node.distro
del ejemplo de arriba, al obtener node@10.15.3
en un sistema Linux de 64 bits, Volta intentaría descargar el tarball desde: http://example.com/linux/x64/node-10.15.3.tar.gz
Hooks bin
El hook bin
es un hook de propósito general que llamará a un script externo para determinar la URL. El valor es una ruta a un script ejecutable que será llamado, y la URL será leída del stdout
de ese script. El stderr
del script se mostrará al usuario, por lo que puede ser usado para mostrar barras de progreso o spinners de espera si se desea. Si la ruta al script es relativa entonces será resuelta relativa al archivo hooks.json
en el que está especificada. En este contexto, una ruta relativa significa que la ruta comienza con ./
o ../
en Linux/MacOS y comienza con .\
o ..\
en Windows. Por último, para hooks de acción distro
, la versión solicitada de la herramienta será pasada como el primer argumento a ese script.
Usando el hook yarn.distro
del ejemplo hooks.json
, al obtener yarn@1.13.0
, Volta llamará ~/yarn-distro "1.13.0"
e intentará descargar el tarball desde la URL que es devuelta por ese hook.