npm scripts で OS ごとに処理を分ける
npm scriptsに clean
ってコマンドを登録しようとしたんですよ。
普通なら rimraf を使うところなんですが、 cleanの過程で node_modules
ディレクトリも削除して綺麗にしたい。
かと言って npm i -g rimraf
など、環境依存になるので以ての外。
rm
コマンドは *NIX 環境に依存してしまう。
rd
コマンドは Windows環境に依存してしまう。
さて困った。
そこで閃きました。
"scripts": { "clean": "node -e \"process.exit(process.platform === 'win32' ^ 1)\" && rd /s /q node_modules || rm -rf node_modules" }
こうします。
これならば、process.platform
を評価して win32
だった場合とそれ以外で処理を分けることができます。
※ true ^ 1 // ==> 0
false ^ 1 // ==> 1
となり、シェルはこれをエラーコードと見るため、 &&
や ||
で繋げることによって処理が分かれます。