【Next.js】mjmlが沼りそうなのでReact Emailに変える話
こんにちは、フリーランスエンジニアの太田雅昭です。
mjml
mjmlは、htmlメールの作成を簡単にするためのライブラリです。
Next.jsでエラー
mjmlをNext.jsのサーバーサイドで使用したかったのですが、下記のエラーが出ました。
no such file or directory, open '(rsc)/../../node_modules/.pnpm/uglify-js@3.19.3/node_modules/uglify-js/lib/utils.js'
色々調べているうちに、下記のissuesを発見。
https://github.com/vercel/next.js/issues/50042
どうやら、以下のような現象のようです。
- App routerではエラーになるが、Pages routerなら動く
この時点で、かなりやばい現象だとわかります。原因にまったく想像がつきません。
一応下記のように、next.config.jsに追記すれば改善するそうです。
module.exports = {
experimental: {
serverComponentsExternalPackages: ["mjml"],
},
};
ただ根本的な解決ではない上、今後も予想しない現象が出そうです。そのため、おとなしくreact emailに乗り換えることにしました。
React Email
React Emailは、Reactの書き方でEmailのHTMLを生成できます。propsを渡して、render関数を呼び出せば、htmlに変換できるようです。
mjmlからのマイグレーションも紹介されています。
https://react.email/docs/getting-started/migrating-to-react-email
今回、mjmlでの実装はそれほど進んでいなかったため、すんなり乗り換えられそうです。