🧐

App Router で Defender Relay Client が使えない

2023/12/04に公開

現象

Next.js の App Router で @openzeppelin/defender-relay-client を使おうとすると、Module not found: Can't resolve 'aws-sdk/clients/lambda'というエラーに遭遇します。

原因

aws-amplify のリポジトリに以下の Issue が上がっています。
https://github.com/aws-amplify/amplify-js/issues/11030
AWS SDK の仕様上、App Router に現状対応できていないことが問題のようです。

解決策

next.config.js で、特定のモジュール(今回の場合は aws-sdk/clients/lambda)がビルド時に無視される設定を追加することで、エラーを解消できます。

next.config.js
/** @type {import('next').NextConfig} */
const config = {
  // …
  webpack: (config, { webpack, isServer, nextRuntime }) => {
    // Avoid AWS SDK Node.js require issue
    if (isServer && nextRuntime === "nodejs")
      config.plugins.push(
        new webpack.IgnorePlugin({
          resourceRegExp: /^aws-sdk\/clients\/lambda$/,
        })
      );
    return config;
  },
  // …
};

module.exports = config;

2023年12月4日執筆時点での暫定的な対応にはなりますが、軽くハマってしまったのでもし同じ現象に困っている方がいればと思い投稿させて頂きました。

Discussion