피드로 돌아가기
Dev.toFrontend
원문 읽기
Bazel Test Tagging 기반의 통합 Lint 시스템 구축 및 의존성 격리 해결
Mastering Your Frontend Build with Bazel: Linting
AI 요약
Context
pnpm 기반의 Monorepo 환경에서 개별 패키지마다 독립적인 Bazel run 명령어를 사용하여 Lint를 수행함. 이 구조는 Bazel의 Sandbox 강제 기능을 활용하지 못하며, 루트 수준에서 pnpm-r을 통한 순차 실행으로 인해 캐시 효율 저하 및 병렬 처리 부재라는 한계점을 가짐.
Technical Solution
lint_test룰을 적용하여 Lint 타겟을 단순 실행 파일이 아닌 검증 가능한 Test 타겟으로 정의- 공통 Macro 파일(
linters.bzl) 내에tags = ["lint"]를 정의하여 모든 Lint 타겟에 일관된 식별자 부여 bazel test ... --test_tag_filters=lint명령어를 통해 패키지 내 다수 린터(ESLint, Stylelint)를 단일 명령어로 병렬 실행- 루트 수준에서
bazel test //packages/...를 호출하여 7개 패키지의 Lint 프로세스를 단일 Bazel 인보케이션으로 통합 public_hoist_packages설정을 통해postcss-scss와 같은 종속성을 루트node_modules로 호이스팅하여 Node.js 런타임 해석 경로 문제 해결- Bazel Sandbox를 통해
bazel run시 누락되었던 미선언 의존성을 식별하고 명시적으로data필드에 정의
실천 포인트
1. Lint/Test 타겟 정의 시 단순 실행(run)보다 검증(test) 룰을 사용하여 Sandbox 격리 및 캐싱 이점을 확보했는가
2. Monorepo 내 공통 툴링 적용 시 개별 BUILD 파일 수정 대신 Shared Macro를 통한 Tagging 전략을 사용하고 있는가
3. 외부 라이브러리의 Resolution 경로 문제 발생 시 호이스팅 설정(`public_hoist_packages`)과 런타임 `data` 의존성 정의를 검토했는가
4. 최상위 스크립트가 패키지 매니저(pnpm 등)의 루프를 도는 대신 빌드 시스템(Bazel 등)의 와일드카드 타겟팅을 활용해 병렬성을 극대화했는가