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.jsonen Linux/MacOS,%LOCALAPPDATA%\Volta\hooks.jsonen Windows) se aplicarán a través de todo el sistema. - Los hooks especificados en un subdirectorio
.voltade 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.jsonpara 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:
indexRepresenta 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.latestRepresenta 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.distroRepresenta 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 pordarwin,linuxowin, dependiendo del sistema operativo.será reemplazado porx86ox64, dependiendo de la arquitectura del sistema.(Solo disponible para accionesdistro) 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 accionesdistro) 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.