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.jsonsu Linux/MacOS,%LOCALAPPDATA%\Volta\hooks.jsonsu Windows) si applicheranno a tutto il sistema. - Gli hooks specificati nella sottodirectory
.voltadi un progetto (<PROJECT ROOT>/.volta/hooks.json) si applicheranno solo all'interno di quel progetto. Qui<PROJECT ROOT>è definito come la posizione delpackage.jsondi 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:
indexrappresenta 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.latestrappresenta l'URL utilizzato per determinare l'ultima versione di quello strumento. Pernode, la risposta dovrebbe essere nello stesso formato diindex, assicurandosi che l'ultima versione sia il primo elemento nell'elenco. Peryarn, la risposta dovrebbe essere una stringa di versione grezza, nient'altro.distrorappresenta 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 è:
{
"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 condarwin,linuxowina seconda del sistema operativo.sarà sostituito conx86ox64a seconda dell'architettura del sistema.(disponibile solo per l'operazionedistro) 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'operazionedistro) 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.