Hooks
デフォルトでは、VoltaはNode、npm、Yarnをパブリックソースとレジストリ(https://nodejs.org、https://yarnpkg.com、https://www.npmjs.com)から取得します。しかし、環境によっては、Voltaに異なるソースからダウンロードするよう指示する必要がある場合があります(例:内部ツール用のnpm Enterprise)。このような状況に対応するため、Voltaはダウンロードプロセスでのフックを提供します。
フックの指定場所
フックは常にhooks.json
というファイルで設定されます。このファイルは、これらのフックに持たせたいスコープに応じて、以下の2つの場所のいずれかに配置できます:
- Voltaディレクトリに指定されたフック(Linux/macOSでは
~/.volta/hooks.json
、Windowsでは%LOCALAPPDATA%\Volta\hooks.json
)はシステム全体に適用されます。 - プロジェクトの
.volta
サブディレクトリに指定されたフック(<PROJECT ROOT>/.volta/hooks.json
)は、そのプロジェクト内でのみ適用されます。ここで<PROJECT ROOT>
は、そのプロジェクトのpackage.json
の場所として定義されます。
フックファイル形式
hooks.json
の内容は、各ツールタイプ(現在はnode
、npm
、yarn
)に対するオプションキーを提供するオブジェクトでなければなりません。各ツールには3つの操作があり、それぞれの操作にフックを適用できます:
index
は、そのツールがダウンロード可能なバージョンのリストを決定するために使用されるURLを表します。そのURLにアクセスしたときのレスポンスは、選択されたツールのパブリックインデックス形式と一致する必要があります。latest
は、そのツールの最新バージョンを決定するために使用されるURLを表します。node
の場合、レスポンスはindex
形式と同じで、最新バージョンがリストの最初の要素であることを確認する必要があります。yarn
の場合、レスポンスは生のバージョン番号文字列のみである必要があります。distro
は、ツールバイナリをダウンロードするために使用されるURLを表します。
最後に、各操作には3つの可能なフック(以下で説明)があり、使用できます(各操作につき一度に1つのみ指定可能)。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"
}
}
}
フックタイプ
prefix
フック
prefix
フックは直接的なURL置換です。URLは指定されたプレフィックスと、その操作のパブリックファイル名を使用して構築されます。例えば、上記のhooks.json
を使用して、最新のyarnバージョンを決定するためのprefix
フックを指定しました。デフォルトでは、Voltaはhttps://yarnpkg.com/latest-version
にリクエストして最新バージョンを取得します。フックを使用すると、Voltaはhttp://example.com/yarnpkg/latest-version
にアクセスしようとし、指定されたプレフィックスhttp://example.com/yarnpkg/
にlatest-version
を追加します。
template
フック
template
フックは、置換されるワイルドカードを含むURLのテンプレートを指定できます。利用可能なワイルドカードは以下の通りです:
は、オペレーティングシステムに応じて
darwin
、linux
、またはwin
に置換されます。は、システムアーキテクチャに応じて
x86
またはx64
に置換されます。(
distro
操作でのみ利用可能)は、Voltaがダウンロードしようとしているツールの特定のバージョンに置換されます。は、Voltaがパブリックレジストリからダウンロードするファイルのファイル名に置換されます。
(
distro
操作でのみ利用可能)は、Voltaがダウンロードを期待するファイル拡張子に置換されます。
TIP
filename
とext
の置換は、Volta 0.8.4以降でのみ利用可能です
上記の例のnode.distro
フックを使用して、64ビットLinuxシステムでnode@10.15.3
を取得するとき、Voltaは以下の場所からtarballをダウンロードしようとします:http://example.com/linux/x64/node-10.15.3.tar.gz
bin
フック
bin
フックは汎用フックで、外部スクリプトを呼び出してURLを決定します。値は呼び出される実行可能スクリプトのパスで、URLはそのスクリプトのstdout
から読み取られます。スクリプトのstderr
はユーザーに表示されるため、必要に応じて進行状況バーや待機スピナーを表示するために使用できます。スクリプトのパスが相対パスの場合、それを指定したhooks.json
ファイルに対して相対的に解決されます。この場合、相対パスとは、Linux/macOSでは./
または../
で始まり、Windowsでは.\
または..\
で始まるパスを意味します。最後に、distro
操作フックの場合、要求されたツールバージョンが最初の引数としてスクリプトに渡されます。
サンプルhooks.json
のyarn.distro
フックを使用して、yarn@1.13.0
を取得するとき、Voltaは~/yarn-distro "1.13.0"
を呼び出し、そのフックが返すURLからtarballをダウンロードしようとします。