피드로 돌아가기
Node.js 20.17.0 (LTS)
Node.js BlogNode.js Blog
Backend

Node.js 20.17.0이 require()로 동기 ESM 모듈 로드와 경로 글롭 매칭 기능을 추가해 모듈 시스템 상호 운용성 확대

Node.js 20.17.0 (LTS)

2024년 8월 21일5intermediate

Context

Node.js 애플리케이션에서 CommonJS와 ES Module 간의 상호 운용성이 제한적이었으며, CommonJS의 require()는 비동기 ESM을 로드할 수 없었다. 파일 경로를 글롭 패턴과 비교하는 작업이 표준 API로 지원되지 않았다.

Technical Solution

  • require()로 동기 ESM 그래프 로드: --experimental-require-module 플래그 활성화 시, "type": "module" 또는 .mjs 확장자 표시된 모듈이고 top-level await가 없으면 require()가 ES Module을 동기식으로 로드하고 네임스페이스 객체 반환
  • path.matchesGlob(path, pattern) 메서드 추가: 개별 경로를 글롭 패턴과 비교하는 표준 API 제공
  • duplexPair() 함수 추가: 서로 연결된 두 개의 Duplex 스트림 배열 반환, 한쪽에 쓴 데이터가 다른 쪽에서 읽을 수 있는 네트워크 연결 유사 동작 구현
  • http.client.request.error 진단 채널 추가: HTTP 클라이언트 요청 에러를 진단 채널을 통해 추적 가능
  • ReadableStreamBYOBReader.read()에 min 옵션 추가: 읽을 최소 바이트 수를 지정 가능

Key Takeaway

Node.js는 CommonJS와 ES Module의 상호 운용성 강화와 스트림·경로·진단 API의 기능 확장을 통해 모듈 에코시스템의 유연성을 증대하고 있으며, 이는 대규모 레거시 프로젝트의 점진적 마이그레이션 경로를 제공한다.


CommonJS 기반 Node.js 프로젝트에서 --experimental-require-module 플래그를 활성화하고 순수 동기 ESM 모듈(top-level await 없음)을 require()로 로드하면, 모듈 마이그레이션 중 점진적 전환이 가능하고 전체 코드베이스를 한 번에 변경할 필요가 없다. path.matchesGlob()을 파일 시스템 감시 로직에 적용하면 글롭 패턴 매칭을 위한 외부 라이브러리 의존성을 제거할 수 있다.

원문 읽기