"모두를 지배하는 하나의 반지"Monorepo 관리자에 대한 재고

이 게시물에서는 모든 모노 레포 요구 사항을 관리하는 단일 솔루션이 올바른 선택인지 또는 "작업에 적합한 도구"접근 방식을 따라야 하는지 잠시 멈추고 다시 생각합니다.

최근 기사(“”)에서 Lerna가 내 Pedalboard 모노 저장소에 있는 요구 사항에 따라 Lerna에서 NX로 마이그레이션하기 시작했습니다.

내가 한 의견은 다음과 같습니다.



나를 만든 🤔 …

내 작업 공간은 Lerna에서 관리할 수 있지만 Yarn Workspaces에서 관리하므로 훨씬 더 합리적이고 실제로 훨씬 더 잘 작동합니다. 그것과 "올바른 작업을 위한 올바른 도구"라는 아이디어가 마음에 든다는 사실이 나를 처음부터 다시 시작하게 만들었습니다.

내가 이 생각을 따른다면 왜 Lerna나 NX가 내 작업 공간을 관리하는 솔루션인 Yarn의 책임인 전체 프로젝트에서 스크립트 실행을 처리해야 합니까?

yarn이 이것을 처리할 수 있는지 봅시다. 빠른 인터넷 검색을 통해 다음을 찾았습니다.

https://classic.yarnpkg.com/en/docs/cli/workspaces#toc-yarn-workspaces-run

NX 호출을 yarn workspace run 명령으로 바꾸고 어떻게 진행되는지 확인합니다.
내가 전에 가지고 있던 것은 이것입니다 :

"scripts": {
       "test": "nx run-many --target=test --all",
       "coverage": "yarn test --coverage",
       "lint": "nx run-many --target=lint --all",
       "build": "nx run-many --target=build --all",
       "publish:lerna": "lerna publish --yes --no-verify-access",
       "coverage:combined": "pedalboard-scripts aggregatePackagesCoverage && nyc report --reporter lcov"
   },


그리고 나는 이것을 다음과 같이 바꿀 것입니다.

"scripts": {
       "test": "yarn workspaces run test",
       "coverage": "yarn test --coverage",
       "lint": "yarn workspaces run lint",
       "build": "yarn workspaces run build",
       "publish:lerna": "lerna publish --yes --no-verify-access",
       "coverage:combined": "pedalboard-scripts aggregatePackagesCoverage && nyc report --reporter lcov"
   },


"build"명령을 제외한 모든 것이 잘 작동합니다. "components"패키지에 "build"스크립트가 없기 때문에 실패합니다. 안타까운 일입니다. NX는 그러한 경우를 간과하고 그냥 지나쳤기 때문입니다.
이 경우에 Yarn이 무엇을 제공하는지 봅시다…

흠, Yarn[foreach](https://next.yarnpkg.com/cli/workspaces/foreach) 명령이 누락된 스크립트를 처리하는 방법을 알고 있는 것 같습니다.
하지만 이 플러그인에는 Yarn v.2 이상이 필요하므로 지침here에 따라 정말 빠르게 업그레이드해 보겠습니다.

새 버전으로 Yarn을 설정한 후 다음과 같이 "foreach"명령을 사용할 수 있는 플러그인을 가져올 수 있습니다.
yarn plugin import workspace-tools
이제 루트 프로젝트package.json를 다음과 같이 수정할 수 있습니다.

"scripts": {
       "test": "yarn workspaces foreach -p run test",
       "coverage": "yarn test --coverage",
       "lint": "yarn workspaces foreach -p run lint",
       "build": "yarn workspaces foreach -ptv run build",
       "publish:lerna": "lerna publish --yes --no-verify-access",
       "coverage:combined": "pedalboard-scripts aggregatePackagesCoverage && nyc report --reporter lcov"
   },

build 명령에 사용하는 매개변수는 병렬로 실행하기 위한 것이며 여전히 토폴로지 순서를 고려하고 종속성을 먼저 해결합니다. "v"는 장황함을 나타냅니다.

모든 스크립트를 확인하고 있는데 NX가 이러한 작업을 완료해야 할 필요성을 제외하면 모든 것이 이전처럼 작동하는 것 같습니다. 대박!

이것은 여전히 ​​미래에 NX가 필요하지 않다는 것을 의미하지는 않지만 내가 사용하는 도구의 문제를 분리하여 유지하는 것이 훨씬 더 합리적입니다.

일반적으로 나는 동일한 하드웨어 장치에 "프린터, 스캐너, 복사기"가 있는 시대 이후로 "올인원"솔루션의 열렬한 팬이 아닙니다. 실제로는 요구 사항에 따라 다르지만 슬림한 단일 저장소의 경우 실제로 대안이 필요한 Lerna가 수행하는 큰 역할(추가할 수 있음)은 패키지 버전을 범핑하고 게시하는 것이라고 생각합니다.
이것은 내 트윗 스레드가 자세히 설명하는 것처럼 NX가 현재 작업 중인 것입니다.

Fresh from the conf -
I've asked if they're going to attend the whole "publish" workflow Lerna has and the answer was that they are currently working on it. They have a few concerns there:
👇🏻

— Matti Bar-Zeev (@mattibarzeev)


사용자 지정 생성기, 종속성 그래프 시각화 등과 같이 저를 흥분시키는 NX의 측면이 여전히 있지만 도구 선택은 지금부터 "작업에 적합한 도구"를 염두에 두고 수행될 것입니다.

항상 그렇듯이 위에서 설명한 내용을 달성할 수 있는 다른 방법을 알고 있다면 다른 사람들과 공유해 주세요. :)

여기요! 방금 읽은 내용이 마음에 들면 Twitter 🍻에서 확인하세요.

사진 제공: Philip Swinburn on Unsplash

좋은 웹페이지 즐겨찾기