(2023-10-29 加筆)
Aggregating modulesが原因だったかもしれない。
上図のexport * from 'module-name'
をエラーが出ていたときは使用していました。
次のように変更しました。
export * from 'module-name'
// ↓
export { name1 } from "module-name"
本記事の内容は誤りでした。(2023-10-26 加筆)
@honey32 さん にご指摘をうけて調査したところ、表題のエラーはかなり特殊な状況でしか再現しませんでした。(コメント欄も御覧ください)
以下はその状況説明と解決した方法です。
素のNextでは再現しなかったので、現象がおこったアプリのコードを見直しました。
本記事ではエラー画面の一部しか記載しませんでしたが、すべての内容は以下の通りとなります。
図中のImport Trace(以前は注目していませんでした)を辿ってみました。
remarkWrapper.ts
という外部モジュールをまとめるバレルファイルを以前作っていました。
このremarkWrapper.ts
のあとからインポートが node_modules
に変わっていました。よって、当該ファイルのインポートが悪さしているのかなと思ったので、index.ts
へのインポートを外しました。
// index.ts
export * from './getOembed'
export * from './getDataTheme'
// export * from './renderReact'
export * as rehype from './rehypeWrapper'
// export * as remark from './remarkWrapper' <===!!!!!!
export { default as getLang} from './getLang'
すると本記事のエラーは生じなくなりました。
次のエラーに対して、再現する状況と解決方法について示します。
特にバレルエクスポート - 参考1, 参考2 - している場合に発生しやすいかと思います。
状況
- Next.js: 13.5.6
-
Client Component
にモジュールをインポートしている。 - そのモジュールは、
index.ts
ファイルからエクスポートしている。
// ButtonTest.tsx
'use client' <=== Client Component Only!!!!
import { testHello } from '@/lib/testHello' <=== OK (/lib/testHello.ts)
import * as TEST from '@/lib' <=== NG (/lib/index.ts)
import {testHello} from '@/lib' <=== NG (/lib/index.ts)
import {testHello} from '@/lib/index' <=== NG (/lib/index.ts)
import {testHello} from '@/lib/libs' <=== OK (/lib/libs.ts)
import * as TEST from '@/lib/index.lib' <=== OK (/lib/index.lib.ts)
export const ButtonTest = () => {
return (
<div>
<button
onClick={() => {
testHello()
}}
>
ButtonTest
</button>
</div>
)
}
解決方法
エクスポートするファイル名をindex.ts
以外にしてください。それ以外であれば、index.lib.ts
や lib.ts
など、なんでも良いです。
補記
index.js
のパターンは試していないのですが、多分だめでしょう。
クライアントサイドにはindex
ファイルによるインポートを解決する仕組みがないのでしょうか?
ここで示した解決方法以外があれば教えてほしいです。