Windows環境でnpm-scriptsが実行されない場合の対処法

※本記事にはプロモーションが含まれています。

npm-scriptsを実行した際、私のMacの環境では正常に動作しましたが、別のWindowsの開発者が同じスクリプトを実行してもコマンドが実行されませんでした。

今回は私が直面した、Windowsでnpm-scriptsが動かない場合の対処法を、備忘録として残した記事となります。
同じ状況に直面した、他の開発者の助けになれると幸いです。

結論:Windowsではシングルクォーテーションが使えない

まず結論としては、Windowsではpackage.jsonファイルの中でシングルクォーテーションが使えないことが原因でした。

Windowsでnpm-scriptsが実行されない場合は、まず以下のようにscriptsセクションでシングルクォーテーションを使用していないか確認してみてください。

{
  "scripts": {
    "copy": "cpx 'public/**' dist/assets"
  },
}

解決方法:ダブルクォーテーションをエスケープ処理する

解決方法は以下のように、シングルクォーテーションをダブルクォーテーションに置き換え、エスケープ処理を行うことで解決します。

  1. シングルクォーテーションをダブルクォーテーションに置き換える
  2. 置き換えたダブルクォーテーションにエスケープ処理を行う

上記の内容を修正したのが以下のスクリプトです。

{
  "scripts": {
    "copy": "cpx \"public/**\" dist/assets"
  },
}

エスケープ処理とは、特定の文字や記号を文字列内でそのまま使いたい場合に、その文字の前に特別な記号(通常はバックスラッシュ)を置くことで、その文字が特殊な意味を持たないようにする処理です。
例えば、ダブルクォーテーションを文字列内で使用する場合、その前にバックスラッシュを置いて \" と書くことで、引用符自体を文字列内に含めることができます。

おわり

以上でWindows環境でも動作するnpm-scriptsの完成です。

npmパッケージの公式サイトでは、シングルクォーテーションを使用している場合があります。
そのため、Macの場合でもシングルクォーテーションを見つけたら、ダブルクォーテーションに置き換えて、エスケープ処理を行う癖をつけておく必要がありそうです。

対処法も原因もとてもシンプルなものでしたが、当時は何が原因かわからずすごく苦労しました。
この経験が、同じ境遇の方々の助けになれば幸いです。

おすすめの書籍