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 delpackage.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. 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.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
è:
{
"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
owin
a seconda del sistema operativo.sarà sostituito con
x86
ox64
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.