import mongoose from "mongoose";
import { connectDB, disconnectDB } from "../utils/database";

위와 같은 폴더 구조에서 경로가 틀리지 않았는데도 아래 오류가 지속해서 떴다.
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/yuhyeon/Desktop/13month/crawler/src/utils/database' imported from /Users/yuhyeon/Desktop/13month/crawler/src/models/fund.js
at finalizeResolution (node:internal/modules/esm/resolve:263:11)
at moduleResolve (node:internal/modules/esm/resolve:908:10)
at defaultResolve (node:internal/modules/esm/resolve:1131:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:390:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:359:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:234:38)
at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:85:39)
at link (node:internal/modules/esm/module_job:84:36) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///Users/yuhyeon/Desktop/13month/crawler/src/utils/database'
}
package.json에
"type": "module", 이 있어
import 시 .js를 붙여주니 해결되었다
import mongoose from "mongoose";
import { connectDB, disconnectDB } from "../utils/database.js";
JavaScript에서 모듈을 import할 때, 모듈 시스템은 확장자를 제외하고 모듈의 경로를 찾으려고 시도한다.
ex. import { connectDB } from "../utils/database";코드에서 모듈 시스템은 "../utils/database" 경로에 해당하는 모듈을 찾아 .js 확장자를 자동으로 추가하려고 시도한다.
일반적으로 Node.js는 CommonJS 모듈 시스템을 사용하며, 확장자를 생략할 때 .js, .json, .node 파일을 찾는다.
그러나 최신 버전의 Node.js(ESM - ECMAScript Modules)에서는 확장자를 생략하면 기본적으로 .js 파일만 찾는다.
따라서 .json 파일이나 .node 파일을 import하려면 명시적으로 확장자를 포함해야 한다.
따라서 "type": "module" 옵션이 package.json 파일에 추가되면, JavaScript 모듈 시스템이 확장자를 생략하지 않고도 모듈을 찾으려고 시도한다.
이 때문에 import 문에서 .js 확장자를 명시적으로 포함해야 한다. 따라서 import { connectDB, disconnectDB } from "../utils/database.js"; 코드를 사용하여 모듈을 정확히 찾을 수 있다!
https://stackoverflow.com/questions/65384754/error-err-module-not-found-cannot-find-module