Hook'lar
Varsayılan olarak, Volta Node, npm ve Yarn'i genel kaynaklardan ve kayıt defterlerinden getirir (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Ancak, ortamınıza bağlı olarak, Volta'ya farklı bir kaynaktan indirmesini söylemek gerekli olabilir (ör. iç araçlar için npm Enterprise). Buna uyum sağlamak için Volta, indirme sürecine hook'lar sağlar.
Hook'ların belirtilacağı yer
Hook'lar her zaman hooks.json adlı bir dosyada ayarlanır. Bu dosya, bu hook'ların hangi kapsamda uygulanmasını istediğinize bağlı olarak iki yerden birinde olabilir:
- Volta dizininde belirtilen hook'lar (Linux/MacOS'ta
~/.volta/hooks.json, Windows'ta%LOCALAPPDATA%\Volta\hooks.json) tüm sistem genelinde geçerli olacaktır. - Bir projenin
.voltaalt dizininde belirtilen hook'lar (<PROJE KÖKÜ>/.volta/hooks.json) yalnızca o proje içinde geçerli olacaktır. Burada<PROJE KÖKÜ>, o projeninpackage.jsondosyasının konumu olarak tanımlanır.
Hook'lar dosya formatı
hooks.json dosyasının içeriği bir nesne olmalıdır ve her araç türü için (şu anda node, npm ve yarn) isteğe bağlı anahtarlara sahip olmalıdır. Her aracın, her birine hook uygulanabilen 3 eylemi vardır:
index- O araç için indirilebilecek sürümler listesini belirlemek için kullanılan URL'yi temsil eder. Bu URL'ye erişildiğinde döndürülen yanıt, seçilen araç için genel dizinlerin formatıyla eşleşmelidir.latest- O aracın en son sürümünü belirlemek için kullanılan URL'yi temsil eder.nodeiçin, yanıtindexile aynı formatta olmalı ve en son sürümün listede ilk öğe olduğundan emin olunmalıdır.yarniçin, yanıt sadece ham sürüm numarası dizesi olmalıdır.distro- Araç ikili dosyalarını indirmek için kullanılan URL'yi temsil eder.
Son olarak, her eylemin kullanılabilecek 3 olası hook'u vardır (aşağıda açıklanmıştır) (herhangi bir zamanda her eylem için yalnızca biri belirtilebilir). Örnek bir hooks.json dosyası:
{
"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"
}
}
}Hook türleri
prefix Hook'ları
prefix hook'u, basit bir URL değiştirme işlemidir. URL, belirtilen önek kullanılarak ve ardından o eylem için genel dosya adı eklenerek oluşturulacaktır. Örneğin, yukarıdaki hooks.json'u kullanarak, en son yarn sürümünü belirlemek için bir prefix hook'u belirtilmiştir. Varsayılan olarak, Volta en son sürümü https://yarnpkg.com/latest-version adresine istek yaparak getirir. Hook kullanılarak, Volta bunun yerine http://example.com/yarnpkg/latest-version adresine erişmeye çalışacaktır; latest-version ifadesini http://example.com/yarnpkg/ önekine ekleyecektir.
template Hook'ları
template hook'u, değiştirilecek joker karakterlerle bir URL için şablon belirtmenize olanak tanır. Kullanılabilir joker karakterler:
- İşletim sistemine bağlı olarakdarwin,linuxveyawinile değiştirilecektir.- Sistemin mimarisine bağlı olarakx86veyax64ile değiştirilecektir.(Yalnızcadistroeylemleri için kullanılabilir) - Volta'nın indirmeye çalıştığı aracın belirli sürümü ile değiştirilecektir.- Volta'nın genel kayıt defterinden indireceği dosyanın dosya adı ile değiştirilecektir.(Yalnızcadistroeylemleri için kullanılabilir) - Volta'nın indirmeyi beklediği dosya uzantısı ile değiştirilecektir.
TIP
filename ve ext değiştirmeleri yalnızca Volta 0.8.4 veya sonraki sürümlerde kullanılabilir
Yukarıdaki örnekteki node.distro hook'unu kullanarak, 64 bitlik bir Linux sisteminde node@10.15.3 getirilirken, Volta tarball'u şu adresten indirmeye çalışacaktır: http://example.com/linux/x64/node-10.15.3.tar.gz
bin Hook'ları
bin hook'u, URL'yi belirlemek için harici bir betiği çağıracak çok amaçlı bir hook'tur. Değer, çağrılacak çalıştırılabilir betiğin yoludur ve URL, o betiğin stdout çıktısından okunacaktır. Betiğin stderr çıktısı kullanıcıya gösterilecektir, böylece istenirse ilerleme çubukları veya bekleme göstergeleri göstermek için kullanılabilir. Betiğin yolu göreli ise, belirtildiği hooks.json dosyasına göreli olarak çözümlenecektir. Bu bağlamda, göreli yol, Linux/MacOS'ta yolun ./ veya ../ ile başlaması ve Windows'ta .\ veya ..\ ile başlaması anlamına gelir. Son olarak, distro eylem hook'ları için, aracın istenen sürümü o betiğe ilk bağımsız değişken olarak geçirilecektir.
Örnek hooks.json dosyasındaki yarn.distro hook'unu kullanarak, yarn@1.13.0 getirilirken, Volta ~/yarn-distro "1.13.0" çağrısını yapacak ve tarball'u bu hook tarafından döndürülen URL'den indirmeye çalışacaktır.