离开 .js 文件扩展名并从目录导入隐含的根索引.js 时找不到 NodeJS 导入模块

问题描述 投票:0回答:1

如果导入找不到模块但文件路径和区分大小写正确,这意味着什么?我感觉到 NodeJS 问题或配置问题(babel?eslint?)而不是 JS 本身。我尝试过使用 Node v19 和 v20,没有任何改变。我发现这个问题发生在两种不同的情况下:

  1. 当文件路径指向默认为index.js的目录时找不到模块
    import Inventory from '../../models';
  2. 当文件路径不包含所谓隐含的 .js 扩展名时找不到模块
    import { Inventory } from '../index';

当我显式导入文件时,它已修复。示例:

  1. import { Inventory } from '../index.js';
  2. 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;

我还测试了将文件和导入语句重命名为驼峰式而不是点式,问题仍然存在,所以也不是这样。

javascript node.js ecmascript-6 import
1个回答
0
投票

根据 node.js 导入文档

使用

import
关键字解析相对或绝对说明符时,必须提供文件扩展名。目录索引(例如
'./startup/index.js'
)也必须完全指定。

要按名称导入不带文件扩展名的模块(即裸说明符),该模块的 exports

 中必须有 
package.json
 字段。

有关导入说明符解析的更多信息可以在此处找到。

© www.soinside.com 2019 - 2024. All rights reserved.