Npmスクリプトでパッケージバージョンを参照して、アプリで現在のバージョンを表示できるようにします。何かのようなもの
{
"name": "bla",
"version": "1.0.0",
"author": "bla bla",
"scripts": {
"build": "node VERSION=<<package.version>> build/build.js"
}
}
これを行う方法はありますか?
npm-script
で、変数npm_package_version
を使用してversion
を参照できます。例えば:
bashシェルの使用(例:Linux、macOS):
{
...
"version": "1.0.0",
"scripts": {
"build": "echo $npm_package_version"
}
}
$
プレフィックスに注意してください
Windowsの使用(例:cmd.exe、Powershell):
{
...
"version": "1.0.0",
"scripts": {
"build": "echo %npm_package_version%"
}
}
%
プレフィックスとサフィックスに注意してください
クロスプラットフォーム
1つの構文のクロスプラットフォームを利用するには、パッケージを確認してください cross-var
パッケージバージョンは、次のようにアプリ/ノードスクリプト(つまり、build.js
)で参照することもできます。
const VERSION = process.env.npm_package_version;
console.log(VERSION); // --> 1.0.0
これを実現する別の方法は、JavaScriptファイル内でプレースホルダーテキスト文字列を指定することです。 build.js
という名前のファイルがあり、そのファイル内に次のように宣言されたVERSION
という名前の変数があるとします。
// build.js
const VERSION = '@VERSION@'
ご覧のとおり、プレースホルダーテキスト文字列は@VERSION@
です。
次に、次のように npm-script で replace というパッケージをインストールして利用できます。
{
...
"version": "1.0.0",
"scripts": {
"add-version": "replace -s \"@VERSION@\" $npm_package_version build/build.js"
}
}
npm run add-version
を実行すると、@VERSION@
という名前のファイルで、1.0.0
のインスタンスがパッケージバージョン(つまりbuild.js
)に置き換えられます。このソリューションは、npmパッケージバージョンを結果のファイルにハードコーディングします。
注:add-version
スクリプト(上記)のto文字列は、現在$
プレフィックス(つまり$npm_package_version
)を使用して変数にアクセスします。そのため、これはbashシェルでのみ正常に実行されます。ただし、クロスプラットフォームで使用するには、セクション1(上記)で説明したようにcross-var
を使用する必要があります。その場合、add-version
スクリプトは次のように定義できます。
{
...
"version": "1.0.0",
"scripts": {
"add-version": "cross-var replace -s \"@VERSION@\" $npm_package_version build/build.js"
}
}