본문 바로가기
문서 정리 프레임워크/Nextra

[Nextra] existSync is not a function

by minhyeok.lee 2024. 8. 11.
반응형

Nextra로 문서정리 도중 existsSync 함수 Type Error가 발생

 ○ Compiling /home ...
TypeError: existsSync is not a function
    at file:///C:/[파일경로]/node_modules/.pnpm/nextra@2.8.0_next@14.2.5_react-dom@18.2.0_react@18.2.0/node_modules/nextra/dist/loader.mjs:19:35

 

위와 같은 에러 출력이 다른 모듈, 다른 위치 등에서 꽤 길게 발생

 

찾아보니 existsSync 함수가 함수가 아니라는 타입오류이며 이 문제는 아래와 같은 경우 발생

1. existsSync 함수가 잘못된 모듈에서 호출되었음

2. 해당 모듈이 올바르게 가져오지 못한 경우


문제 원인

1. ESM(ECMAScript Modules)과 CommonJS 혼용 문제

existsSync는 Node.js의 fs 모듈에 있는 함수인데, 이 함수는 CommonJS에서 기본적으로 사용

ESM 환경에서는 이를 불러오는 방법이 다를 수 있음

 

2. 파일 시스템 모듈 가져오기 문제

fs 모듈을 잘못된 방식으로 가져온 경우에도 발생할 수 있음


해결방법

1. ESM에서 fs 모듈 사용하기

ESM 모듈 시스템에서 fs 모듈을 사용할 떄 require 대신 import 문을 사용해야 함

하지만 Node.js에서 기본저긍로 제공하는 fs 모듈은 ESM을 완전히 지원하지 않음

이 경우에는 동적으로 require를 사용하는 방법을 교체해야 함

// ESM 모듈 환경에서는 fs 모듈을 동적으로 가져옴
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const { existsSync } = require('fs');

// existsSync를 사용하는 코드에서 주소를 확인하고 수행
if (existsSync('/path/to/file')) {
  console.log('File exists');
} else {
  console.log('File does not exist');
}

 

2. nextra 패키지 버그

nextra 패키지 내에서 문제가 발생한 것이라면 최신 버전으로 업데이트

 

다행히 2. 의 이유로 Type Error가 출력되었던 것이고 이는 아래와 같이 패키지를 업데이트 하여 해결함

pnpm update nextra
반응형

댓글