Skip to content

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.json di Linux/MacOS, %LOCALAPPDATA%\Volta\hooks.json di Windows) akan berlaku di seluruh sistem.
  • Hook yang ditentukan dalam subdirektori .volta dari suatu proyek (<ROOT PROYEK>/.volta/hooks.json) hanya akan berlaku dalam proyek tersebut. <ROOT PROYEK> di sini didefinisikan sebagai lokasi package.json untuk 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:

  • index Mewakili 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.
  • latest Mewakili URL yang digunakan untuk menentukan versi terbaru dari alat tersebut. Untuk node, respons harus dalam format yang sama dengan index, memastikan bahwa versi terbaru adalah elemen pertama dalam daftar. Untuk yarn, respons harus berupa string nomor versi mentah dan tidak ada yang lain.
  • distro Mewakili 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:

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"
        }
    }
}

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 dengan darwin, linux, atau win, tergantung pada sistem operasi.
  • akan diganti dengan x86 atau x64, tergantung pada arsitektur sistem.
  • (Hanya tersedia untuk aksi distro) 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 aksi distro) 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.

Released under the BSD 2-Clause License.