Nx Monorepo 프로젝트에서 종속성 제약 조건 적용
Are you using NRWL/NX monorepo in your company? and you are worried how to configure dependencies so that you can better control your projects? I use
nx dependency constraints
to restrict which project can depend on whom just like you do in.net
orjava
or any typed language. Read this article to understand how you can configure dependency constraint and visualize your monorepo workspace dependency graph.
종속성 적용이 필요한 이유는 무엇입니까?
Nx Monorepo 작업 공간에는 애플리케이션(앱)과 라이브러리(lib)가 있을 수 있습니다. 앱에는 서버에서 호스팅되는 프로젝트가 있습니다. Lis에는 앱을 지원하는 프로젝트가 있어야 합니다. Libs 폴더 안에는 서비스 프로젝트가 있을 수 있습니다. Libs 내에서 우리는 결국 많은 프로젝트를 생성하게 되며 모든 프로젝트가 다른 모든 프로젝트에 의존할 수 있는 경우 매우 혼란스럽습니다.
그러나 서비스 코드를 잘 정의된 응집력 있는 블록으로 분할하려는 경우. 특히 서비스 지향 아키텍처Advanced Distributed Systems Design by Udi Dahan를 따르는 경우. 그러면 하나의 서비스 코드가 다른 서비스 코드에 종속되어서는 안 된다는 것을 알 수 있습니다. 따라서 JavaScript 프로젝트에서 프로젝트가 서로 의존하는 방식에 제약을 가할 수 있습니다. 그런 다음 프레임 워크를 사용하지 않으면 매우 어렵습니다. Nx Monorepo
tag
및 scope
을 사용하는 것이 좋습니다.자세한 내용은 이 기사를 끝까지 읽으십시오!
Monorepo 작업 공간 프로젝트 이해
내 monorepo에는 3개의 폴더가 있음을 알 수 있습니다.
Branding
, logger
, layout
와 같은 3개의 프로젝트가 있는 angular material
폴더Sales
및 product-editor
products
폴더Customers
및 user-editor
와 같은 2개의 프로젝트가 있는 users
폴더어떤 프로젝트가 누구에게 의존할 수 있는지 정의
다음은 내 모노 리포지토리에서 적용하려는 종속성 규칙입니다.
판매 프로젝트:
고객 프로젝트:
브랜딩 프로젝트:
좋은 소식은 구성을 사용하여 Nx Monorepo에서 종속성 적용을 무료로 수행할 수 있다는 것입니다. 따라서 아래 단계를 따르십시오.
1단계: Nx.json에 프로젝트 태그 추가
nx.json
로 이동하여 프로젝트 태그를 추가합니다."projects": {
"sales-product-editor": {
"tags": [
"scope:sales"
]
},
"sales-products": {
"tags": [
"scope:sales"
]
},
"customers-user-editor": {
"tags": [
"scope:customers"
]
},
"customers-users": {
"tags": [
"scope:customers"
]
},
"shared-ng-material": {
"tags": [
"scope:branding"
]
},
"shared-layout": {
"tags": [
"scope:branding"
]
},
"shared-logger": {
"tags": [
"scope:branding"
]
},
"onlinestore-client-e2e": {
"tags": [],
"implicitDependencies": [
"onlinestore-client"
]
},
"onlinestore-admin-e2e": {
"tags": [],
"implicitDependencies": [
"onlinestore-admin"
]
},
"onlinestore-client": {
"tags": [
"type:app",
"scope:client"
]
},
"onlinestore-admin": {
"tags": [
"type:app",
"scope:admin"
]
},
"onlinestore-client-e2e": {
"tags": [],
"implicitDependencies": [
"onlinestore-client"
]
},
"onlinestore-admin-e2e": {
"tags": [],
"implicitDependencies": [
"onlinestore-admin"
]
}
}
2단계: tslint.json 파일에 종속성 적용 추가
nx-enforce-module-boundaries
파일에 아래tslint.json
배열을 추가합니다. "nx-enforce-module-boundaries": [
true,
{
"enforceBuildableLibDependency": true,
"allow": [],
"depConstraints": [
{
"sourceTag": "scope:sales",
"onlyDependOnLibsWithTags": [
"scope:sales",
"scope:branding"
]
},
{
"sourceTag": "scope:customers",
"onlyDependOnLibsWithTags": [
"scope:customers",
"scope:branding"
]
},
{
"sourceTag": "scope:branding",
"onlyDependOnLibsWithTags": [
"scope:branding"
]
}
]
}
],
경계 제약 테스트
이제
sales-products.module.ts
로 이동하여 아래 가져오기를 수행하면 됩니다.판매 서비스 규칙을 기억하십시오: 👍
판매 프로젝트
판매 프로젝트 종속성 규칙 라이브 테스트
SharedLoggerModule
가져오기를 시도하고 npm run affected:lint
를 실행하면 오류가 표시되지 않습니다. // sales project
import {SharedLoggerModule} from '@myorg/shared/logger';
CustomersUserEditorModule
가져오기를 시도하고 npm run affected:lint
를 실행하면 오류가 표시됩니다. // Sales project can not depend on Customers project
import {CustomersUserEditorModule} from '@myorg/customers-user-editor';
아래 오류가 표시됩니다.
> ng run sales-products:lint
Linting "sales-products"...
C:/Projects/GitHub/nx-repo/myorg/myorg/libs/sales/products/src/lib/sales-products.module.ts:9:1
ERROR: 9:1 nx-enforce-module-boundaries A project tagged
with "scope:sales" can only depend on libs tagged with "scope:sales", "scope:branding"
SalesProductEditorModule
프로젝트를 가져오고 npm run affected:lint
를 실행하면 오류가 표시되지 않습니다. // Sales project can depend on other sales project
import {SalesProductEditorModule} from '@myorg/sales-product-editor';
결론
그래서 저는 Nx Monorepo 프레임워크가 기본적으로 경계 제약을 제공하는 방식이 마음에 들었습니다.
풀 스택 개발자 되기 💻
풀 스택 개발자가 되고 새로운 소프트웨어 개발자 또는 수석 개발자/설계자로 캐리어를 성장시키려는 경우. 전체 스택 개발 교육 프로그램에 가입하는 것을 고려하십시오. All-Access Monthly 멤버십 플랜이 있으며 모든 비디오 코스, 슬라이드, 소스 코드 및 월간 화상 통화에 무제한으로 액세스할 수 있습니다.
You bright future is waiting for you so visit today FullstackMaster and allow me to help you to board on your dream software company as a Developer,Architect or Lead Engineer role.
💖 나에게 👋라고 말해!
루페시 티와리
www.rupeshtiwari.com
✉️ Email Rupesh
Fullstack Master의 설립자
Reference
이 문제에 관하여(Nx Monorepo 프로젝트에서 종속성 제약 조건 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rupeshtiwari/enforcing-dependency-constraints-in-nx-monorepo-projects-3b7h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)