단일을 의미하는 mono와 Repository가 합쳐진 단어로, 여러 가지의 멀티 레포(multi-repo)에 반대되는 개념으로서 하나의 저장소에 여러 프로젝트 및 패키지를 가진 것을 의미한다.
모노레포의 장점
여러 패키지에서 하나의 설정을 공유할 수 있다.
: 예를 들어, Eslint나 Prettier 등 설정을 루트 레벨에서 관리할 수 있기 때문에 여러 Repository에서 각각 따로 관리하던 설정을 공유할 수 있다.
패키지(package) 버전 통합 및 의존성 해결
: 멀티 레포에서 A라는 Repo는 babel 패키지 x.x.1 버전을 사용하고 B라는 Repo에서 x.x.2 babel 패키지를 사용하고 있다면 추후에 다른 버전으로 인한 이슈가 생길 수 있는데, 모노 레포에서는 root에서 모든 npm을 관리해서 버전을 통합시킬 수 있다. 이렇게 하면 여러 Repo에서 중복설치하지 않고 root 폴더에서 관리하여 훨씬 패키지 관리에 용이하다.
코드의 재사용
: 여러 레포에서 간혹 공통으로 사용하는 코드들이 있을 수 있다. 타입스크립트를 예를 들면, enum이나 type에 대한 코드가 중복될 수 있는데 이를 중복되지 않게 모노레포에서 여러 Repo의 공통의 코드를 하나로 관리할 수 있다.
모노 레포 툴
Yarn Workspaces : root package.json 파일에서 설정한 하위 폴더에 있는 여러 package.json 파일에 있는 종속성을 한번에 설치할 수 있게 해줍니다.