📦

package.jsonのnpm scriptsの極意

に公開

結論

npm scriptsでは、 $npm_config_<key> という形式で記述した値を、実行時に --<key> の形で渡すことができます。つまり、複雑なコマンドをpackage.jsonに記述しつつ、実行時にパラメータを渡すことが可能です。

例えば:

{
  "scripts": {
    "test": "jest --watch $npm_config_target"
  }
}

このスクリプトは以下のように実行できます:

npm run test --target=hello
# → jest --watch hello が実行される

詳細な使い方

基本的な構文

  1. package.jsonでの記述

    • $npm_config_ のプレフィックスに続けて任意のキー名を指定
    • 複数のパラメータも設定可能
  2. コマンド実行時

    • --<key>=<value> の形式で値を渡す
    • スペースを含む値は引用符で囲む

実践的な使用例

テストファイルの絞り込み

{
  "scripts": {
    "test": "jest --watch $npm_config_target",
    "test:coverage": "jest --coverage $npm_config_target"
  }
}

実行例:

# 特定のファイルのみテスト
npm run test --target=src/utils/date.test.ts

# 特定のディレクトリ配下のテストをカバレッジ付きで実行
npm run test:coverage --target=src/components/

ビルド設定の切り替え

{
  "scripts": {
    "build": "webpack --mode $npm_config_mode",
  }
}

実行例:

npm run build --mode=development
npm run build --mode=production

おわりに

似たような機能を提供する @sushidesu/trun というパッケージを作成していましたが、npm自体にこの機能が備わっていることを知り、パッケージは不要だったことに気付きました。

npmに備わっている便利な機能を活用することで、より簡潔で保守性の高いスクリプトを書くことができます。package.jsonの新たな使い方を見つけたときは、まずnpmの標準機能を確認してみることをお勧めします。

GitHubで編集を提案

Discussion