How we rebuilt Cloudflare Workers’ module registry for Node.js compatibility
Cloudflare는 Workers 런타임의 핵심 구성 요소인 workerd의 모듈 레지스트리를 Node.js 호환성을 위해 재작성하여 기능을 개선했습니다. 이제 Workers는 Node.js에서 사용할 수 있는 모든 안정적인 API를 기본적으로 지원하며, 모든 플랜에서 최대 64 MiB의 애플리케이션 크기를 지원하여 압축된 번들 크기 제한을 제거했습니다.
이러한 변경은 모듈 시스템의 일관성을 확보하는 데 중점을 두며, import.meta, lazy 컴파일, 공유 코드 캐시 등을 활용하는 URL 기반 모듈 레지스트리를 도입했습니다. 개발자는 이제 Worker 코드 내에서 모듈을 로드하고 캐시하는 방식이 Node.js 환경과 더욱 밀접하게 연관되어, ESM, CommonJS, WebAssembly 모듈 간의 호환성이 크게 향상되었습니다.
새로운 모듈 레지스트리 덕분에 import.meta.url과 같은 구문이 실제 URL로 파싱되며, 에러 처리 방식도 로딩 경로에 관계없이 일관된 클래스와 메시지를 사용하게 되어 디버깅이 용이해졌습니다. 또한 WebAssembly 모듈은 소스 단계 임포트(source phase imports)를 지원하여 컴파일된 형태를 직접 가져올 수 있게 되었습니다.
개발자는 Worker에 new_module_registry 호환성 플래그를 활성화하여 이러한 개선된 기능을 즉시 사용할 수 있습니다. 이 업데이트는 서버리스 환경에서 더 큰 애플리케이션을 배포하고, 모듈 간의 상호작용을 더욱 예측 가능하게 만드는 데 기여합니다.
이러한 변경은 모듈 시스템의 일관성을 확보하는 데 중점을 두며, import.meta, lazy 컴파일, 공유 코드 캐시 등을 활용하는 URL 기반 모듈 레지스트리를 도입했습니다. 개발자는 이제 Worker 코드 내에서 모듈을 로드하고 캐시하는 방식이 Node.js 환경과 더욱 밀접하게 연관되어, ESM, CommonJS, WebAssembly 모듈 간의 호환성이 크게 향상되었습니다.
새로운 모듈 레지스트리 덕분에 import.meta.url과 같은 구문이 실제 URL로 파싱되며, 에러 처리 방식도 로딩 경로에 관계없이 일관된 클래스와 메시지를 사용하게 되어 디버깅이 용이해졌습니다. 또한 WebAssembly 모듈은 소스 단계 임포트(source phase imports)를 지원하여 컴파일된 형태를 직접 가져올 수 있게 되었습니다.
개발자는 Worker에 new_module_registry 호환성 플래그를 활성화하여 이러한 개선된 기능을 즉시 사용할 수 있습니다. 이 업데이트는 서버리스 환경에서 더 큰 애플리케이션을 배포하고, 모듈 간의 상호작용을 더욱 예측 가능하게 만드는 데 기여합니다.