MDMTをwindows環境でnpm run buildする際のエラー解消法


初めに

fandさんことamagiさんによるMDMTをWindows環境でせこせこいじっていた訳ですが、
ひと段落したタイミングでnpm run buildしたところ、

'hoge' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

こんな感じのエラーがいっぱい出たので解決法をまとめます。(ある程度わかってる人ならなんとなくこの時点で察せるやつだと思うけど、、、)

問題点

結論から言うと、package.jsonにあるコマンドがwin/mac&linuxで異なることが原因です。まんまですね。なので、、、

"scripts": {
        "build": "NODE_ENV=production run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw",
        "build:build": "next build",
        "build:export": "next export -o docs",
        "build:manifest": "node scripts/generate-manifest.js",
        "build:nojekyll": "touch docs/.nojekyll",
        "build:preload": "node scripts/copy-preload.js",
        "build:sw": "workbox generateSW scripts/workbox-config.js",
        "clean": "rm -rf .next docs",
        "lint": "eslint --ext .js,.ts,.tsx pages lib components scripts",
        "start": "next",
        "test": "NODE_ENV=production babel-node test/index.js"
    }

このコードを

"scripts": {
        "build": "SET NODE_ENV=production & run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw",
        "build:build": "next build",
        "build:export": "next export -o docs",
        "build:manifest": "node scripts/generate-manifest.js",
        "build:nojekyll": "copy nul docs\\.nojekyll",
        "build:preload": "node scripts/copy-preload.js",
        "build:sw": "workbox generateSW scripts/workbox-config.js",
        "clean": "rd /s /q .next docs",
        "lint": "eslint --ext .js,.ts,.tsx pages lib components scripts",
        "start": "next",
        "test": "NODE_ENV=production babel-node test/index.js"
    }

こうすれば走ります。
具体的に何をどうしたかというと、、、

NODE_ENVをwindowsに合わせてset&をつけてあげたり、

"build": "NODE_ENV=production run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw"
"build": "SET NODE_ENV=production & run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw"

touchはwindowsにはないので、copy nulに変更してあげる。& /(スラッシュ)だとパス指定できないので\(バックスラッシュ)で対応してあげる。

"build:nojekyll": "touch docs/.nojekyll"
"build:nojekyll": "copy nul docs\\.nojekyll"

rm -rfもwindowsにはないので、rd /s /qで対応

 "clean": "rm -rf .next docs"
"clean": "rd /s /q .next docs"

こんな感じです。参考になれば。