👻

react-helmet-asyncでError when evaluating SSR moduleの対処について

2024/05/22に公開

Remix(vite)で react-helmet-async を利用しようとした際に発生したエラーの対処方法について記載します。誰かの時短になれば幸いです。

エラー内容

react-helmet-async を使用しようとすると、以下のエラーが発生しました:

[vite] Named export 'Helmet' not found. The requested module 'react-helmet-async' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:

import pkg from 'react-helmet-async';
const {Helmet} = pkg;
    at analyzeImportedModDifference (file:///Users/hirosue/private/workspace/my-remix-app/node_modules/vite/dist/node/chunks/dep-cNe07EU9.js:54049:19)
    at nodeImport (file:///Users/hirosue/private/workspace/my-remix-app/node_modules/vite/dist/node/chunks/dep-cNe07EU9.js:55101:9)
    at async ssrImport (file:///Users/hirosue/private/workspace/my-remix-app/node_modules/vite/dist/node/chunks/dep-cNe07EU9.js:54998:24)
    at async eval (/Users/hirosue/private/workspace/my-remix-app/app/root.tsx:5:31)
    at async instantiateModule (file:///Users/hirosue/private/workspace/my-remix-app/node_modules/vite/dist/node/chunks/dep-cNe07EU9.js:55058:9

対処方法

このエラーは、react-helmet-async が CommonJS モジュールとしてエクスポートされているため、名前付きエクスポートとしてインポートできないことが原因です。この問題を解決するには、以下のようにデフォルトエクスポートとしてインポートし、必要なコンポーネントを取得します。

修正内容

- import { Helmet } from 'react-helmet-async';
+ import * as HelmetAsync from 'react-helmet-async'; // デフォルトエクスポートとしてインポート
+ const { Helmet } = HelmetAsync; // 必要なコンポーネントを取得

Discussion