Cloudflare PagesにNext.jsをデプロイするときにハマった話

2023/01/04に公開1

はじめに

Next.jsで作成した静的サイトをCloudflare Pagesにデプロイしようとした時に

SyntaxError: Unexpected token '?'

というエラーにハマった話

下記エラー詳細

22:59:55.790	Executing user command: next build && next export
22:59:55.885	/opt/buildhome/repo/node_modules/next/dist/build/index.js:347
22:59:55.885	                    ...pageKeys.app ?? [], 
22:59:55.885	                                     ^
22:59:55.885	
22:59:55.885	SyntaxError: Unexpected token '?'
22:59:55.886	    at wrapSafe (internal/modules/cjs/loader.js:1054:16)
22:59:55.886	    at Module._compile (internal/modules/cjs/loader.js:1102:27)
22:59:55.886	    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
22:59:55.886	    at Module.load (internal/modules/cjs/loader.js:986:32)
22:59:55.886	    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
22:59:55.886	    at Module.require (internal/modules/cjs/loader.js:1026:19)
22:59:55.886	    at require (internal/modules/cjs/helpers.js:72:18)
22:59:55.886	    at Object.<anonymous> (/opt/buildhome/repo/node_modules/next/dist/cli/next-build.js:10:37)
22:59:55.887	    at Module._compile (internal/modules/cjs/loader.js:1138:30)
22:59:55.887	    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
22:59:55.893	Failed: build command exited with code: 1
22:59:56.847	Failed: an internal error occurred

原因

Cloudflare Pagesのデフォルトで使われている node のバージョンが v12.18.0 だったため

冷静に確認すると、下記のログが出力されていました。

Now using node v12.18.0 (npm v6.14.4)

解決策

ローカルのルートディレクトリに .node-version というファイルを作成し、

v17 以下の任意のバージョンを指定する

.node-version
// 例
v16.7.0

Language support and tools
(中略)
Node.js: Any version up to 17.x

https://developers.cloudflare.com/pages/platform/build-configuration/#language-support-and-tools

参考

https://developers.cloudflare.com/pages/platform/build-configuration/
https://dev.classmethod.jp/articles/cloudflare-pages-support-nextjs-edge-runtime/
https://github.com/remix-run/remix/issues/3095

Discussion

motsumotsu

まさにクリティカルな情報でした。感謝します。