web-dev-qa-db-ja.com

npmスクリプトでパッケージバージョンを参照するにはどうすればよいですか?

Npmスクリプトでパッケージバージョンを参照して、アプリで現在のバージョンを表示できるようにします。何かのようなもの

{
  "name": "bla",
  "version": "1.0.0",
  "author": "bla bla",
  "scripts": {
    "build": "node VERSION=<<package.version>> build/build.js"
  }
}

これを行う方法はありますか?

24
Evaldo Bratti

1)npm-scriptsでパッケージバージョンを参照します。

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


2)ノードスクリプトでのパッケージバージョンの参照。

パッケージバージョンは、次のようにアプリ/ノードスクリプト(つまり、build.js)で参照することもできます。

const VERSION = process.env.npm_package_version;
console.log(VERSION); // --> 1.0.0

3).jsファイルのプレースホルダー文字列をパッケージバージョンに置き換えます。

これを実現する別の方法は、JavaScriptファイル内でプレースホルダーテキスト文字列を指定することです。 build.jsという名前のファイルがあり、そのファイル内に次のように宣言されたVERSIONという名前の変数があるとします。

// build.js
const VERSION = '@VERSION@'

ご覧のとおり、プレースホルダーテキスト文字列は@VERSION@です。

次に、次のように npm-scriptreplace というパッケージをインストールして利用できます。

{
  ...
  "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"
  }
}
47
RobC