🧐
App Router で Defender Relay Client が使えない
現象
Next.js の App Router で @openzeppelin/defender-relay-client
を使おうとすると、Module not found: Can't resolve 'aws-sdk/clients/lambda'
というエラーに遭遇します。
原因
aws-amplify のリポジトリに以下の Issue が上がっています。
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