Skip to content

Hooks

Per impostazione predefinita, Volta ottiene Node, npm e Yarn da fonti e registri pubblici (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Tuttavia, a seconda del tuo ambiente, potrebbe essere necessario dire a Volta di scaricare da fonti diverse (ad esempio per npm Enterprise per strumenti interni). Per adattarsi a questa situazione, Volta fornisce hooks durante il processo di download.

Dove specificare gli hooks

Gli hooks sono sempre impostati in un file chiamato hooks.json. Questo file può essere in una delle due posizioni, a seconda della portata che desideri che questi hooks abbiano:

  • Gli hooks specificati nella directory Volta (~/.volta/hooks.json su Linux/MacOS, %LOCALAPPDATA%\Volta\hooks.json su Windows) si applicheranno a tutto il sistema.
  • Gli hooks specificati nella sottodirectory .volta di un progetto (<PROJECT ROOT>/.volta/hooks.json) si applicheranno solo all'interno di quel progetto. Qui <PROJECT ROOT> è definito come la posizione del package.json di quel progetto.

Formato del file hooks

Il contenuto di hooks.json deve essere un oggetto che fornisce chiavi opzionali per ogni tipo di strumento (attualmente node, npm e yarn). Ogni strumento ha 3 operazioni, ognuna delle quali può avere un hook applicato:

  • index rappresenta l'URL utilizzato per determinare l'elenco delle versioni disponibili per il download di quello strumento. La risposta quando si accede a quell'URL deve corrispondere al formato dell'indice pubblico dello strumento selezionato.
  • latest rappresenta l'URL utilizzato per determinare l'ultima versione di quello strumento. Per node, la risposta dovrebbe essere nello stesso formato di index, assicurandosi che l'ultima versione sia il primo elemento nell'elenco. Per yarn, la risposta dovrebbe essere una stringa di versione grezza, nient'altro.
  • distro rappresenta l'URL utilizzato per scaricare i file binari dello strumento.

Infine, ogni operazione ha 3 possibili hooks (descritti di seguito) che possono essere utilizzati (solo uno per operazione può essere specificato alla volta). Un esempio di file 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"
        }
    }
}

Tipi di hooks

Hook prefix

L'hook prefix è una sostituzione diretta dell'URL. L'URL sarà costruito usando il prefisso specificato, seguito dal nome del file pubblico per quell'operazione. Ad esempio, usando il hooks.json sopra, abbiamo specificato un hook prefix per determinare l'ultima versione di yarn. Per impostazione predefinita, Volta otterrebbe l'ultima versione facendo una richiesta a https://yarnpkg.com/latest-version. Con l'hook, Volta tenterà di accedere a http://example.com/yarnpkg/latest-version, aggiungendo latest-version al prefisso specificato http://example.com/yarnpkg/.

Hook template

L'hook template ti consente di specificare un template per l'URL che contiene wildcard che saranno sostituiti. I wildcard disponibili sono:

  • sarà sostituito con darwin, linux o win a seconda del sistema operativo.
  • sarà sostituito con x86 o x64 a seconda dell'architettura del sistema.
  • (disponibile solo per l'operazione distro) sarà sostituito con la versione specifica dello strumento che Volta sta tentando di scaricare.
  • sarà sostituito con il nome del file che Volta scaricherebbe dal registro pubblico.
  • (disponibile solo per l'operazione distro) sarà sostituito con l'estensione del file che Volta si aspetta di scaricare.

TIP

Le sostituzioni filename e ext sono disponibili solo in Volta 0.8.4 o versioni successive

Usando l'hook node.distro nell'esempio sopra, quando si ottiene node@10.15.3 su un sistema Linux a 64 bit, Volta tenterà di scaricare il tarball da: http://example.com/linux/x64/node-10.15.3.tar.gz

Hook bin

L'hook bin è un hook generico che chiamerà uno script esterno per determinare l'URL. Il valore è il percorso dello script eseguibile che sarà chiamato, e l'URL sarà letto dallo stdout di quello script. Lo stderr dello script sarà mostrato all'utente, quindi può essere usato per mostrare barre di progresso o spinner di attesa se necessario. Se il percorso dello script è relativo, allora sarà risolto relativamente al file hooks.json che lo specifica. In questo caso, un percorso relativo significa che il percorso inizia con ./ o ../ su Linux/MacOS, e .\ o ..\ su Windows. Infine, per gli hooks dell'operazione distro, la versione dello strumento richiesto sarà passata come primo argomento a quello script.

Usando l'hook yarn.distro nell'esempio hooks.json, quando si ottiene yarn@1.13.0, Volta chiamerà ~/yarn-distro "1.13.0" e tenterà di scaricare il tarball dall'URL restituito da quell'hook.