npmスクリプト
長いコマンドに名前を付ける
開発を進めると、起動のコマンドはだんだん長くなります。環境変数を付けたり、監視の指定を足したりするからです。
毎回それを打つ代わりに、package.json の scripts に名前を付けて登録できます。
JSON
{
"scripts": {
"start": "node app.js",
"dev": "node --watch app.js"
}
}登録したら、次のように呼び出します。
プレーンテキスト
npm run dev打つのは短い名前だけです。中身が変わっても、チームの全員が同じ npm run dev を打ち続けられます。手順を覚えるのではなく、手順をファイルに書いておくという考え方です。
start だけは run を省ける
start は特別扱いされていて、npm start でも動きます。npm run start と書いても同じです。
それ以外の名前は npm run が必要です。npm dev では動きません。
よく置かれる名前
決まりはありませんが、慣習はあります。
| 名前 | 何をするか |
|---|---|
start | 本番の形で起動する |
dev | 開発用に起動する(自動再起動あり) |
test | テストを走らせる |
この 3 つは多くのプロジェクトで同じ意味で使われています。初めて触るプロジェクトでも、package.json の scripts を見れば動かし方が分かります。
手を動かす
演習では、スクリプト名を受け取って、実際に実行されるコマンドを返す関数を書きます。npm run が何をしているのかを、仕組みの側から確かめてください。
要件
- 登録されている名前なら、その値のコマンド文字列をそのまま返す
- 登録されていない名前なら
dev というスクリプトはありませんの形で返す(名前の部分は渡されたもの) - 値が空文字で登録されている場合も、登録されているものとして扱う
入出力例
resolveScript({"dev":"node --watch app.js","start":"node app.js"}, "dev") → "node --watch app.js"
resolveScript({"dev":"node --watch app.js","start":"node app.js"}, "start") → "node app.js"
resolveScript({"start":"node app.js"}, "dev") → "dev というスクリプトはありません"
resolveScript({"test":""}, "test") → ""ヒント
編集 ゆめさく編集部