Nx에서 Dependency 관리 전략
https://nx.dev/concepts/decisions/dependency-management
독립적으로 관리된다면?
- 각 프로젝트에서 동일한 디펜던시의 다른 버전을 사용하게 만들 수도 있다.
- 또한, 각 프로젝트 코드가 동일한 폴더 구조 하에 있어도, 해당 코드를 공유 할 수 없으므로 유용해보이기도 한다.
- 그런데..만약 프로젝트 1 과 프로젝트 2가 다른 버전의 리액트를 사용 중이라면, 공유된 코드는 어떤 버전의 리액트를 기준으로 작성되어야할까?
- 또한, 루트 node_modules 에 설치된 디펜던시 버전과, 프로젝트의 package.json에 지정된 버전이 다를 때는..!? 로컬에서는 앱이 올바르게 구동되지만, 배포될 때 실패할 수도 있다.
단일 버전 정책
- 모든 디펜던시를 루트 package.json 파일에서 정의하는 것.
- 코드베이스 전체에 걸쳐, 모든 디펜던시에 대해 단일 버전을 강제.
- 개별 프로젝트는 여전히 package.json 을 가질 수 있으나, 이는 메타 데이터를 정의하기 위한 용도이며, 프로젝트의 디펜던시를 정의하는 용도는 아님!
그런데..그러면 불필요한 디펜던시도 번들링에 포함되는거 아녓!?😠
- 노노.
- Nx 가 제공하는 플러그인은 Nx의 디펜던시 그래프를 사용하여, 빌드 아웃풋의 개발 package.json 파일의 디펜던시 섹션을 자동으로 채우고, lock 파일을 미리 채워준다.
- 이는 빌드 결과물이, 실제로 해당 앱에서 사용되는 디펜던시만 포함되도록 한다.
- 개발자가 특성 디펜던시의 마지막 사용을 제거하면, 해당 디펜던시는 번드렝서 제거됨
우려사항
- 업데이트 조정
- 동일한 레포지토리에서 리액트 앱을 개발하는 두 팀이 있다면, 레포지토리 전체에서 리액트 전체를 업그레이드 할지 합의가 필요함.
- 이는 Nx를 벗어나는 문제임.
- 만약 개발자들이 합의가 불가능하다면 모노레포를 찢고 멀티레포로 가는게 맞음.