如果导入找不到模块,但文件路径和区分大小写是正确的,这意味着什么?我感觉到NodeJS问题或配置问题(Babel?Eslint?),而不是JS本身.我已经try 使用NodeV19和V20,没有任何更改.我发现这个问题发生在两个不同的 case 中:
- 当文件路径指向应默认为index.js
import Inventory from '../../models';
的目录时找不到模块 - 当文件路径排除假定隐含的.js扩展名
import { Inventory } from '../index';
时找不到模块
当我显式导入文件时,该问题已修复.示例:
-
import { Inventory } from '../index.js';
个 -
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"
}
}