如果导入找不到模块,但文件路径和区分大小写是正确的,这意味着什么?我感觉到NodeJS问题或配置问题(Babel?Eslint?),而不是JS本身.我已经try 使用NodeV19和V20,没有任何更改.我发现这个问题发生在两个不同的 case 中:

  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,但上面列出的其他导入即使有正确的文件路径和大小写敏感性也会显示"Module not found".当我显式导入文件时,所有的测试都会运行并通过,所以我知道导出都是正确的.你觉得这看起来一样吗?

为了确保我的进出口是正确的,这是/models/index.js美元

import Inventory from './Inventory/Inventory.model.js';

// define model relationships here

export { Inventory };

为了确保我的导出是正确的,这是从/models/Inventory/Inventory.model.js开始的常量导出

export default Inventory;

我还测试了将文件和导入语句重命名为驼峰大小写而不是点大小写,问题仍然存在,因此也不是问题所在.

编辑:这是/服务器/Package.json:

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "watch": "nodemon",
    "seed": "node config/seeds.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^5.1.1",
    "dotenv": "^16.4.5",
    "express": "^4.18.2",
    "jsonwebtoken": "^9.0.2",
    "mysql2": "^3.9.2",
    "sequelize": "^6.37.1"
  },
  "devDependencies": {
    "@faker-js/faker": "^8.4.1",
    "nodemon": "^3.1.0",
    "sequelize-mock": "^0.10.2",
    "uuid": "^9.0.1"
  }
}

...和根Package.json:

{
  "name": "name",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "jest",
    "start": "node server/index.js",
    "dev": "concurrently \"cd server && npm run watch\" \"cd client && npm start\"",
    "install": "cd server && npm i && cd ../client && npm i",
    "build": "cd client && npm run build"
  },
  "repository": {
    "type": "git",
  },
  "keywords": [],
  "jest": {
    "testEnvironment": "node",
    "transform": {
      "^.+\\.js$": "babel-jest"
    }
  },
  "devDependencies": {
    "@babel/core": "^7.24.0",
    "@babel/preset-env": "^7.24.0",
    "@babel/register": "^7.23.7",
    "babel-plugin-inline-dotenv": "^1.7.0",
    "concurrently": "^8.2.2",
    "eslint": "^8.57.0",
    "eslint-config-prettier": "^9.1.0",
    "eslint-plugin-jest": "^27.9.0",
    "eslint-plugin-prettier": "^5.1.3",
    "eslint-plugin-react": "^7.33.2",
    "jest": "^29.7.0",
    "prettier": "^3.2.5",
    "supertest": "^6.3.4"
  }
}

推荐答案

node.js import documentation个人,

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

要按模块的名称导入不带文件扩展名的模块(即,裸说明符),模块的package.json中必须有一个exports字段.

有关导入说明符解析的更多信息,请参见here.

Javascript相关问答推荐

对象和数字减法会抵消浏览器js中的数字

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

React 17与React 18中的不同setState行为

Phaser 3 console. log()特定游戏角色的瓷砖属性

扫描qr code后出错whatter—web.js

在react js中使用react—router—dom中的Link组件,分配的右侧不能被 destruct ''

成功完成Reducers后不更新状态

数字时钟在JavaScript中不动态更新

JSDoc创建并从另一个文件导入类型

如何将Cookie从服务器发送到用户浏览器

Javascript json定制

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

用于在路径之间移动图像的查询

Rxjs流中生成IMMER不能在对象上操作

MarkLogic-earch.suggest不返回任何值

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

删除元素属性或样式属性的首选方法

为什么当雪碧的S在另一个函数中时,Phaser不能加载它?

Reaction-在同一页内滚动导航(下拉菜单)