如果导入找不到模块但文件路径和区分大小写正确,这意味着什么?我感觉到 NodeJS 问题或配置问题(babel?eslint?)而不是 JS 本身。我尝试过使用 Node v19 和 v20,没有任何改变。我发现这个问题发生在两种不同的情况下:
import Inventory from '../../models';
import { Inventory } from '../index';
当我显式导入文件时,它已修复。示例:
import { Inventory } from '../index.js';
import Inventory from '../../models/Inventory.model.js';
这是一个设置示例,其中 /models 有一个 index.js,/models/Inventory 有一个 Inventory.models.js,但上面列出的其他导入即使具有正确的文件路径和区分大小写,也会给出“找不到模块”。当我显式导入文件时,所有测试都会运行并通过,因此我知道导出都是正确的。这对你来说符合吗?
为了确保我的导入和导出正确,这里是
/models/index.js
:
import Inventory from './Inventory/Inventory.model.js';
// define model relationships here
export { Inventory };
为了确保我的导出正确,这是来自
/models/Inventory/Inventory.model.js
的 const 导出:
export default Inventory;
我还测试了将文件和导入语句重命名为驼峰式而不是点式,问题仍然存在,所以也不是这样。
根据 node.js 导入文档,
使用
关键字解析相对或绝对说明符时,必须提供文件扩展名。目录索引(例如import
)也必须完全指定。'./startup/index.js'
要按名称导入不带文件扩展名的模块(即裸说明符),该模块的 exports
中必须有
package.json
字段。
有关导入说明符解析的更多信息可以在此处找到。