概要
windows機でnpm-scriptで「エディタの起動」と「gulp」を1コマンドで行いたい。環境変数PATHと「|(パイプ)」を使うことで解決できた。
解決方法と注意事項
//package.json
"scripts": {
"gulp": "npm run gulp",
"sublime": "sublime_text .",
"start": "npm run sublime | gulp"
},
作業開始時に対象フォルダで「npm run start」。エディタが開き、gulpが起動する。
ズボラばんざい。
注意事項
- 「|(パイプ)」は本来ならば出力の受け渡しに使うが、
ここでは左辺を終了させるためだけに使っている。 - 環境変数PATHにsublime_Textの実行ファイルを登録しておく必要がある。
- 汎用性に欠いたpackage.jsonを作るのはどうかと思う
別案
同時起動の部分だけに関して言うならばnpm-run-all – npmこのパッケージインストールした方が早い。
並列と直列の両対応らしい。試してないけど。
やりたかった事
やりたかった事は開始コマンドを1つ入力すると
- エディタがフォルダ(プロジェクト)を開き、
- gulpが起動する
gulp単品での起動と使い分けができるようにする。
エディタはsublime_textを使用。
半角スペースがエスケープできない
まず試してみた。エディタのフルパスをそのままぺたり。
"scripts": {
"sublime2": "\"C:\\Sublime Text\\sublime_text.exe\"",
},
→エラー: ‘C:\Sublime’ is not recognized
半角スペースで切られて実行されたっぽいダブルクォートでエスケープできていない。 色々試したが、結局できなかったので
環境変数PATHにsublime_textとして登録した後、
"scripts": {
"sublime2": "sublime_text .",
},
とする事で解決。この時点で自分のPCでしか動作しないので注意。
駄目な形のオンリーワンである。
npm-scriptの並列起動
軽く調べてみた所、initした時にできるサンプルのように
「echo ~~ && exit ~~」
&&で直列、&で並列を指定できるという記述を見たが、
windows機では動作しないとの事。
javascript – How can I run multiple npm scripts in parallel? – Stack Overflowwindowsの場合、どちらも直列で左辺が終了すると右辺が実行される。
(→エディタを終了させるとgulpが始まる) 同ページ内にパイプを使ってみてはどうか、という記述あり。
試してみる。
//package.json
"scripts": {
"gulp": "npm run gulp",
"sublime": "sublime_text .",
"start": "sublime_text | gulp",
},
なんかしらんが希望通りの動作した。
パイプが無理やり左辺の終了を伝えてくれるのだろうか、と考えたが、順番を入れ替えたら動作しなかったのでおそらく違う。
意味がわからん。
感想
理屈がわからないと怖いのでおとなしく並列用のパッケージを使おう。パイプの謎はともかく、実行ファイルのパスにスペースが含まれる場合の解決策は知っておきたい。
引き続き調査する。