次のお題はこちらです

ハムスターは黄金比

Windowsでnpm-scriptsが動かないときはシングルクォーテーションが原因かも

Windowsでnpm-scriptsが動かないときはシングルクォーテーションが原因かも

気づけずにしばらく考え込んでしまったけれど、分かれば大したことはなかった件。

起きた現象

ejsのコンパイルをしようと思って、Mac環境で使っていたnpm-scriptsのタスクをWindowsで動かそうとしたらうまくいかない。

ターミナル(コマンドプロンプト)を確認すると、エラーメッセージは出ていないが、コンパイルが行われない状態になる(オプションで指定したjsonファイルは認識されているっぽい)

こんな風に表示される(肝心のHTMLがコンパイルされないかなしみ) Windowsでnpm scriptsが動かない

原因

実行コマンドの中でディレクトリパスを囲むのに使っていたシングルクォーテーション('←これ)が原因。MacLinuxはこの書き方で問題ないのに、Windowsだとシングルクォートは無視されてしまうらしい。

シングルクォーテーションで書いたコマンド

"ejs": "ejs-cli --base-dir ejs/pages/ --file '**/**.ejs' --out ./dist --options data.json"

※ package.jsonから該当箇所を抜粋しています

修正方法

シングルクォーテーションを使って '**/**.ejs' と記述していた部分を、ダブルクォーテーションとエスケープを使って \"**/**.ejs\" のように書きかえると正常に動作するようになった。

ダブルクォーテーションとエスケープを使って修正したコマンド

"ejs": "ejs-cli --base-dir ejs/pages/ --file \"**/**.ejs\" --out ./dist --options data.json"

もしかしてWin⇔MacLinux)でいちいちコマンド書き換えないといけないのかな?と一瞬心配したものの、この書き方はMacLinuxでもちゃんと動く。よかった。

まとめ

MacLinuxをメイン環境にしている方はだいたいシングルクォーテーションで書かれていることが多いので、配布しているサンプルスクリプトWindows環境で動かない!と困ったときはこの部分も確認してみるといいと思います。