Backup
Module not found: Can't resolve 'dns' (수정중)
두라미
2023. 1. 11. 16:13
내 환경 정보
-
{
"name": "nextjs-course",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
},
"dependencies": {
"dotenv": "^16.0.3",
"next": "^13.1.1",
"react": "^18",
"react-dom": "^18",
"dns": "file:./src/mock/dns"
}
}
결론부터 말하면 "dns": "file:./src/mock/dns" <- 이게 해결책이고, 이 부분이 내가 임의로 만든 짜가 패키지가 위치하는 경로다.
상황
-
/* /pages/[meetupId]/index.js */
import { MongoClient, ObjectId } from "mongodb";
//이거 import하면 에러메시지가 보인다.
Module not found: Can't resolve 'dns'
/* mongodb의 document를 id로 호출하려함.
ObjectId가 필요함.
해서, ObjectId를 import 하니,이러한 에러 표시 됨 */
이유
-
패키지 중 하나가 dns 모듈에 의존하는 JavaScript promise를 사용하기 때문에 발생
Node.js(서버 측)에서만 사용할 수 있고 코드가 브라우저에서 실행될 때는 사용할 수 없다.
구현은 그것에 의존하지만 작동하는 데 필요하지 않으므로 dns 모듈의 존재를 가장하여 문제를 해결할 수 있습니다.
해결
- 가짜로 dns 패키지를 만들어 넣었다. 전혀 좋은 방법이 아니라 생각하며 이른바 몽키패치 에 가깝다. getStaticProps에서 mongodb connection을 여는 부분에서 생긴 문제다. (샘플 코드라서 이부분에 같이 있습니다.) 즉 내 코드에서도 서버사이드에서만 console.log가 출력되고, 브라우저에서 찍히는 것도 아니다. 브라우저에서 실행될때는 사용할 수 없는 모듈에 의존하기때문에 라는데... 음...
어찌 됐든, 위 답변으로
import { MongoClient, ObjectId } from "mongodb";
이것을 import 할 수 있었다. 정석적 문제 해결이라기보다는, 사용하지 않는 모듈임에도 의존성이 있기에. 가짜로 추가한;;; 안좋은 방법이 되시겠다. 일단 적어두고 다른 문제 해결 후 돌아오련다.
참고
- https://stackoverflow.com/questions/51541561/module-not-found-cant-resolve-dns-in-pg-lib