シナリオ
Nextjs のバージョンアップ(v11 → v13)
- "next": "11.0.1",
+ "next": "^13.1.0",
を検討していますが、github action を経由で、
$ npm run build
を実行したら、下記のようなエラーが出てきました。
err: /......./node_modules/next/dist/build/index.js:347
err: ...pageKeys.app ?? [],
err: ^
err: SyntaxError: Unexpected token '?'
err: at wrapSafe (internal/modules/cjs/loader.js:915:16)
err: at Module._compile (internal/modules/cjs/loader.js:963:27)
err: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
err: at Module.load (internal/modules/cjs/loader.js:863:32)
err: at Function.Module._load (internal/modules/cjs/loader.js:708:14)
err: at Module.require (internal/modules/cjs/loader.js:887:19)
err: at require (internal/modules/cjs/helpers.js:74:18)
err: at Object.<anonymous> (/......./node_modules/next/dist/cli/next-build.js:10:37)
err: at Module._compile (internal/modules/cjs/loader.js:999:30)
err: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
err: npm ERR! code ELIFECYCLE
nodeバージョン確認
nodeバージョンが合わっていないだと思っていますので、アプリのnodeバージョンを確認しました。
$ cat .node-version
16.13.1
$ node -v
v16.13.1
$ nodenv version
16.13.1 (set by ....
問題なそうです。
調査
nodeのglobalバージョンを確認すると、
$ node -v
v12.22.12
ここの問題かもしれません。手動で
$ npm run build
を実行すると、無事にビルトできました。monitで確認すると
$ pm2 monit
x xx Interpreter args N/A x
x xx Exec mode fork x
x xx Node.js version 16.13.1 x
どちらでも大丈夫そうですね。なんだろう? github actionでnodeバージョンを確認すると、
out: run `npm audit fix` to fix them, or `npm audit` for details
out: NPM building ...
out: v12.22.12
out: > ....-react-application@1.0.0 build ./
out: > next build
err: /......./node_modules/next/dist/build/index.js:347
err: ...pageKeys.app ?? [],
err: ^
err: SyntaxError: Unexpected token '?'
err: at wrapSafe (internal/modules/cjs/loader.js:915:16)
....
v12.22.12(globalバージョン)を利用しているらしいです。
対応
nodeのglobalバージョンを16.13.1 に変更する
$ sudo npm install -g n
$ sudo n 16.13.1
$ node -v
v16.13.1
Re-run all jobs をクリックすると、無事にデプロイできました。
結論
おそらくgithub actionでnode のglobalバージョンを利用しているらしいです。
nodenv効かないかな?ご参照いただければ幸いです。