Pharus, Lighthouse v10 대응 위해 CommonJS에서 ESM으로 전환… ts-node 이슈는 Loaders API로 해결
·2023.10.19 00:00
핵심 내용
Pharus가 Lighthouse v10 도입을 위해 CommonJS에서 ESM으로 전환하며, ts-node의 path-alias 및 CommonJS 파일 컴파일 문제를 Node.js Loaders API로 해결한 과정을 소개한다.
1 / 11
자세히 보기
Google의 Lighthouse v10은 ESM 기반으로 변경되어 기존 CommonJS 환경의 Pharus에서는 동적 import나 CJS 진입점 사용 시 기능적 제약이나 많은 코드 변경이 필요했다. 이에 Pharus는 전면적인 ESM 전환을 결정했다. 전환 과정에서 두 가지 주요 이슈가 발생했다. 첫째, ts-node 실행 시 tsconfig의 path-alias가 해석되지 않는 문제였다. 이는 Node.js의 --loader 플래그를 사용하여 tsconfig-paths 라이브러리와 연동된 resolve 훅을 작성함으로써 별칭을 절대 경로로 변환하여 해결했다. 둘째, 모노레포 내 CommonJS로 작성된 share 패키지를 ESM으로 전환된 runner 패키지에서 import할 때 발생하는 구문 오류였다. 이는 load 훅을 통해 해당 파일들을 ESM 포맷으로 강제 구문분석하도록 처리하고, __dirname을 사용하는 설정 파일은 import.meta.url을 사용하는 .mts 확장자 파일로 분리하여 해결했다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.