Hook
Secara default, Volta mengambil Node, npm, dan Yarn dari sumber dan registri publik (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Namun, tergantung pada lingkungan Anda, mungkin perlu untuk memberi tahu Volta agar mengunduh dari sumber yang berbeda (misalnya npm Enterprise untuk alat internal). Untuk mengakomodasi hal tersebut, Volta menyediakan hook ke dalam proses unduhan.
Di mana menentukan hook
Hook selalu ditetapkan dalam file bernama hooks.json. File ini dapat berada di salah satu dari dua tempat, tergantung pada cakupan yang Anda inginkan untuk hook tersebut:
- Hook yang ditentukan dalam direktori Volta (
~/.volta/hooks.jsondi Linux/MacOS,%LOCALAPPDATA%\Volta\hooks.jsondi Windows) akan berlaku di seluruh sistem. - Hook yang ditentukan dalam subdirektori
.voltadari suatu proyek (<ROOT PROYEK>/.volta/hooks.json) hanya akan berlaku dalam proyek tersebut.<ROOT PROYEK>di sini didefinisikan sebagai lokasipackage.jsonuntuk proyek tersebut.
Format file Hook
Konten hooks.json harus berupa objek, dengan kunci opsional untuk setiap jenis alat (saat ini node, npm, dan yarn). Setiap alat memiliki 3 aksi yang masing-masing dapat diterapkan hook:
indexMewakili URL yang digunakan untuk menentukan daftar versi yang tersedia untuk diunduh untuk alat tersebut. Respons saat mengakses URL tersebut harus sesuai dengan format indeks publik untuk alat yang dipilih.latestMewakili URL yang digunakan untuk menentukan versi terbaru dari alat tersebut. Untuknode, respons harus dalam format yang sama denganindex, memastikan bahwa versi terbaru adalah elemen pertama dalam daftar. Untukyarn, respons harus berupa string nomor versi mentah dan tidak ada yang lain.distroMewakili URL yang digunakan untuk mengunduh biner alat.
Terakhir, setiap aksi memiliki 3 hook yang mungkin (dijelaskan di bawah) yang dapat digunakan (hanya satu yang dapat ditentukan untuk setiap aksi pada satu waktu). Contoh file hooks.json adalah:
{
"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"
}
}
}Jenis Hook
Hook prefix
Hook prefix adalah penggantian URL yang sederhana. URL akan dibangun menggunakan prefix yang ditentukan, diikuti oleh nama file publik untuk aksi tersebut. Misalnya, menggunakan hooks.json di atas, kami memiliki hook prefix yang ditentukan untuk menentukan versi yarn terbaru. Secara default, Volta akan mengambil versi terbaru dengan membuat permintaan ke https://yarnpkg.com/latest-version. Menggunakan hook, Volta akan mencoba mengakses http://example.com/yarnpkg/latest-version, menambahkan latest-version ke prefix yang ditentukan yaitu http://example.com/yarnpkg/.
Hook template
Hook template memungkinkan Anda untuk menentukan template untuk URL, dengan wildcard yang akan diganti. Wildcard yang tersedia adalah:
akan diganti dengandarwin,linux, atauwin, tergantung pada sistem operasi.akan diganti denganx86ataux64, tergantung pada arsitektur sistem.(Hanya tersedia untuk aksidistro) akan diganti dengan versi spesifik dari alat yang sedang diunduh oleh Volta.akan diganti dengan nama file yang akan diunduh oleh Volta dari registri publik.(Hanya tersedia untuk aksidistro) akan diganti dengan ekstensi file yang diharapkan oleh Volta untuk diunduh.
TIP
Penggantian filename dan ext hanya tersedia di Volta 0.8.4 atau yang lebih baru
Menggunakan hook node.distro dari contoh di atas, saat mengambil node@10.15.3 pada sistem Linux 64-bit, Volta akan mencoba mengunduh tarball dari: http://example.com/linux/x64/node-10.15.3.tar.gz
Hook bin
Hook bin adalah hook serbaguna yang akan memanggil skrip eksternal untuk menentukan URL. Nilainya adalah jalur ke skrip yang dapat dieksekusi yang akan dipanggil, dan URL akan dibaca dari stdout skrip tersebut. stderr dari skrip akan ditampilkan kepada pengguna, sehingga dapat digunakan untuk menampilkan bilah kemajuan atau spinner menunggu jika diinginkan. Jika jalur ke skrip bersifat relatif, maka akan diselesaikan relatif terhadap file hooks.json tempat ia ditentukan. Dalam konteks ini, jalur relatif berarti jalur yang dimulai dengan ./ atau ../ di Linux/MacOS dan dimulai dengan .\ atau ..\ di Windows. Terakhir, untuk hook aksi distro, versi alat yang diminta akan diteruskan sebagai argumen pertama ke skrip tersebut.
Menggunakan hook yarn.distro dari contoh hooks.json, saat mengambil yarn@1.13.0, Volta akan memanggil ~/yarn-distro "1.13.0" dan mencoba mengunduh tarball dari URL yang dikembalikan oleh hook tersebut.