"모두를 지배하는 하나의 반지"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 -
— Matti Bar-Zeev (@mattibarzeev)
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:
👇🏻
사용자 지정 생성기, 종속성 그래프 시각화 등과 같이 저를 흥분시키는 NX의 측면이 여전히 있지만 도구 선택은 지금부터 "작업에 적합한 도구"를 염두에 두고 수행될 것입니다.
항상 그렇듯이 위에서 설명한 내용을 달성할 수 있는 다른 방법을 알고 있다면 다른 사람들과 공유해 주세요. :)
여기요! 방금 읽은 내용이 마음에 들면 Twitter 🍻에서 확인하세요.
사진 제공: Philip Swinburn on Unsplash
Reference
이 문제에 관하여("모두를 지배하는 하나의 반지"Monorepo 관리자에 대한 재고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mbarzeev/rethinking-the-one-ring-to-rule-them-all-monorepo-manager-2n5g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)