Skip to content

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 del package.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. Para node, la respuesta debería estar en el mismo formato que index, asegurándose de que la última versión sea el primer elemento en la lista. Para yarn, 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:

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

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 o win, dependiendo del sistema operativo.
  • será reemplazado por x86 o x64, 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.