環境
- Windows10
- Node.js(v18.18.1)
- Express(v4.18.2)
- React(v18.2.0)
経緯
- Express環境で、React側と同じ記述を用いてモジュールをインポートしようとしたところ、パスは間違っていないのにモジュールが見つからないというエラーが発生した。
詳細
- Reactではファイルインポート時に以下の記述でOK。
import { apiHandler } from "test/apiHandler"
import apiHandler from "test/apiHandler"
- Node.js(Express)だと以下エラーが発生する。
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:¥test¥apiHandler' imported from (インポート先のパス)
at ....
code: 'ERR_MODULE_NOT_FOUND'
対処方法
以下のように拡張子をつけて記述する。
import { apiHandler } from "test/apiHandler.js"
import apiHandler from "test/apiHandler.js"
理由
ChatGPTさんいわく、以下の通り。
ReactやブラウザのJavaScript環境では、 モジュールバンドラー(例えば、WebpackやParcelなど)が、拡張子を省略した際に自動的にファイルの拡張子を補完することができます。 このような環境では、モジュールバンドラーがファイルのタイプを推測し、適切なファイルを見つけることが可能です。
一方で、 Node.js環境では、通常はモジュールバンドラーがない ため、ファイルを明示的に指定する必要があります。Node.jsは、ファイルの拡張子を見てファイルのタイプを特定することができません。そのため、Node.jsでは拡張子を省略すると、ファイルが見つからず、モジュールのインポートが失敗することがあります。
以上