windows機でnpm-scriptでsublime-textとgulpを同時に起動したい

概要

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つ入力すると
  1. エディタがフォルダ(プロジェクト)を開き、
  2. 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 Overflow
windowsの場合、どちらも直列で左辺が終了すると右辺が実行される。
(→エディタを終了させるとgulpが始まる) 同ページ内にパイプを使ってみてはどうか、という記述あり。
試してみる。
//package.json
"scripts": {
    "gulp": "npm run gulp",
    "sublime": "sublime_text .",
    "start": "sublime_text  | gulp",
  },
なんかしらんが希望通りの動作した。 パイプが無理やり左辺の終了を伝えてくれるのだろうか、と考えたが、
順番を入れ替えたら動作しなかったのでおそらく違う。
意味がわからん。

感想

理屈がわからないと怖いのでおとなしく並列用のパッケージを使おう。
パイプの謎はともかく、実行ファイルのパスにスペースが含まれる場合の解決策は知っておきたい。
引き続き調査する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です