📦
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 が実行される
詳細な使い方
基本的な構文
-
package.jsonでの記述
-
$npm_config_
のプレフィックスに続けて任意のキー名を指定 - 複数のパラメータも設定可能
-
-
コマンド実行時
-
--<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の標準機能を確認してみることをお勧めします。
Discussion