ESLint Cannot read properties of undefined (Intrinsic) 오류 해결하기
(dev.to)
TypeScript 7의 Go-native 리라이트로 인한 ESLint 오류는 단순한 버전 문제가 아니라 pnpm의 호환성 데이터베이스가 의존성을 강제로 주입하며 발생하므로, pnpm why를 통해 정확한 의존성 경로를 파악하고 해결해야 합니다.
이 글의 핵심 포인트
- 1TypeScript 7의 Go-native 리라이트로 인해 기존 JS enum(Cjs, Intrinsic) 익스포트가 삭제됨
- 2로컬 package.json에 TS 6를 명시했더라도 pnpm의 호환성 데이터베이스가 TS 7을 주입할 수 있음
- 3pnpm why typescript를 실행하여 TypeScript가 어떤 경로를 통해 설치되었는지 확인하는 것이 해결의 첫 단계임
- 4@typescript-eslint/types를 통한 주입의 경우 pnpm 12.0.0, overrides, 또는 ignoreCompatibilityDb=true 설정이 필요함
- 5단순히 package.json에서 버전을 고정하는 것만으로는 pnpm의 내부 패치로 인한 문제를 해결할 수 없음
이 글에 대한 공공지능 분석
왜 중요한가?
개발자가 의도하지 않은 의존성 업데이트가 CI/CD 파이프라인과 로컬 개발 환경을 파괴할 수 있음을 보여주는 사례로, 패키지 매니저의 내부 동작이 소프트웨어 안정성에 미치는 영향을 시사합니다.
어떤 배경과 맥락이 있나?
TypeScript 7은 Go-native 컴파일러로 전환되며 기존 JS API 구조를 변경했으며, pnpm은 하위 호환성을 위해 특정 패키지의 의존성을 재작성하는 'compatibility database' 기능을 운영하고 있습니다.
업계에 어떤 영향을 주나?
모노레포나 복잡한 의존성 구조를 가진 팀은 단순한 package.json 수정만으로는 해결되지 않는 '보이지 않는 의존성' 문제에 직면할 수 있으며, 이는 인프라 및 도구 관리의 난이도를 높입니다.
한국 시장에 어떤 시사점이 있나?
빠른 배포와 자동화가 생명인 한국 스타트업 환경에서, 패키지 매기저의 업데이트나 내부 메커니즘 변화가 예기치 못한 빌드 실패를 초래할 수 있으므로 의존성 잠금(Lockfile)과 검증 프로세스의 중요성을 재확인시켜 줍니다.
이 글에 대한 큐레이터 의견
이번 이슈는 현대적인 프론트엔드 생태계에서 '의존성의 추상화'가 가져온 위험성을 극명하게 보여줍니다. 개발자는 package.json에 명시된 버전만 믿고 있지만, 실제 런타임 환경은 패키지 매니저의 지능적인 패치 레이어에 의해 변형될 수 있습니다. 이는 개발 도구의 편리함이 때로는 디버깅을 불가능하게 만드는 '블랙박스'가 될 수 있음을 의미합니다.
로컬 환경과 CI 환경의 일치성을 유지하기 위해, 단순히 버전을 고정하는 것을 넘어 pnpm why와 같은 도구를 활용해 의존성 트리의 실체를 파악하는 역량이 필수적입니다. 다만, 이러한 문제를 피하기 위해 모든 의존성을 극도로 보수적으로 관리한다면 최신 기술 도입을 통한 생산성 향상이라는 기회비용을 놓칠 수 있습니다. 따라서 패키지 매니저의 메커니즘을 이해하되, 의도적인 overrides 설정을 통해 통제 가능한 범위 내에서 기술 업데이트를 수용하는 전략적 접근이 필요합니다.
관련 뉴스
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.