serverless-nextjsを使うもTypeError: Object(...) is not a functionエラーでビルドに失敗した

目次
  1. serverless-nextjsとは
  2. 記述例
  3. 原因
  4. 参考

AWS環境にNext.jsをお手軽にデプロイするツールにserverless-nextjsというものがあったので、最近試してみていました。

serverless-nextjsとは

https://github.com/serverless-nextjs/serverless-next.js

Serverless Framerworkを使っているならお馴染みのserverless.ymlファイルに、Next.js用の記述を書いてserverlessコマンドを叩くだけで、AWSのCloudfront, Lambda, S3に各種データを展開してくれる超便利ツールです。

Route53で取得したドメインも指定しておけば、CloudFrontにうまい具合に紐づけてくれます。

記述例

serverless.yml

myNextApplication:
  component: "@sls-next/serverless-component@1.18.0"
  inputs:
    domain: ["portfolio", "ts-soda.net"]

通常は↑のファイルをプロジェクトのルートに配置し、serverlessを実行するだけなのですが、 私の場合はNext.jsのビルド段階でTypeError: Object(...) is not a functionエラーが出てしまい、なかなかデプロイできませんでした。

原因

npmパッケージのバージョンによっては、エラーが発生する模様。 next, react, react-domのバージョンを現時点での最新に上げて、再度serverlessを実行したところ上手くビルドが出来るようになりました。

ビルドに失敗したバージョン

package.json

{
  ...
  "dependencies": {
    "next": "10.0.3",
    "react": "17.0.1",
    "react-dom": "17.0.1",
    ...
  },
...
}

ビルドに成功したバージョン

package.json

{
  ...
  "dependencies": {
    "next": "10.1.3",
    "react": "17.0.2",
    "react-dom": "17.0.2",
    ...
  },
...
}

GitHubのIssueにも同じ内容のバグ報告が上がっていましたが、明確な原因は掴めず…。 もし、ビルドできず悩んでいる方がおられましたら、まずはバージョンの変えてみることをおすすめします。

参考

https://github.com/vercel/next.js/issues/22206

https://sunday-morning.app/posts/2020-11-08-next-js-react-typeerror-object-is-not-a-function