NX Monorepo의 OCLIF
소개
Digikare에서 우리는 git monorepo를 사용하여 git 철학을 바꾸기 시작했습니다. 우리는 Angular/NestJ를 해결하고 있으며 현재 올바른 도구는 💚 NX 입니다. 개발 몇 달 후 API를 CLI 클라이언트에 노출하기로 결정했습니다. 그래서 우리는 최고의 프레임워크 CLI를 찾기 시작했고, OCLIF을 찾았습니다.
NX 및 OCLIF 문제
우리는 NX와 OCLIF가 쉽게 함께 작동하고 OCLIF를 NX 앱으로 추가하고 플러그인을 라이브러리로 추가할 것이라고 생각했습니다. 하지만 그렇지 않습니다. 사실 OCLIF는 자체 빌드 도구가 필요하며 완전한 프로젝트여야 합니다. OCLIF는 빌드 프로세스를 실행하기 위해 일부 종속성과 npm 스크립트가 필요합니다.
많은 시도 끝에 마침내 NX와 OCLIF로 작업하는 가장 쉬운 방법을 찾았습니다.
예시
앱 2개와 라이브러리 2개라는 단일 저장소 구조를 만들 것입니다. Oclif 앱은 User lib에 의존하는 Auth lib를 사용합니다.
작업 공간 만들기
먼저 nx 워크스페이스를 생성합니다.
$ npx create-nx-workspace
oclif 앱을 만든 후. monorepo의 루트 폴더에 있어야 합니다.$ npx oclif multi cli
이제 동일한 git 저장소에 NX monorepo 및 OCLIF 프로젝트가 있습니다.
재사용 가능한 라이브러리 만들기
보시다시피 우리는
Auth
및 User
2개의 라이브러리를 생성해야 하지만 oclif
앱만 Auth
에 종속되므로 NX에서 의존할 수 있는 라이브러리를 수행하기 위해 NX에서 publishable
라이브러리를 생성해야 합니다.$ nx generate @nrwl/node:library auth --publishable
$ nx generate @nrwl/node:library user --buildable
user
lib is buildable because auth depends on this lib so when auth will be built user should be built also.
🤘 코드를 작성해 봅시다
인증 사용 사례 만들기
// libs/auth/src/lib/auth.ts
export class Auth {
authenticate() {
return true;
}
}
이제 인증 사용 사례가 완료되었으므로 CLI 애플리케이션에서 사용하려고 합니다.
auth
을 빌드하고 oclif
앱에 연결해야 합니다.🏗 lib 빌드
$ nx build auth
🔗 링크
cd dist/libs/auth && npm link
Go to
cli
app to use our usecase.
Run the link to your project and add it to your dependencies npm onpackage.json
$ npm link @xxx/auth
이제 CLI 앱의 기본 명령
hello.ts
에서 인증 사용 사례를 호출합니다.import {Command, flags} from '@oclif/command'
import { Auth } from '@xxxx/auth';
export default class Hello extends Command {
async run() {
this.log(`Authenticated : ${new Auth().authenticate()}`)
}
}
그것을 실행하면 결과가 있어야합니다
Authenticated : true
user
lib에 auth
lib를 추가합니다.User
클래스를 만듭니다.// libs/user/src/lib/user.ts
export class User {
firstName: string;
lastName: string;
roles: string[];
}
// libs/auth/src/lib/auth.ts
import { User } from '@xxx/user';
export class Auth {
authenticate(user: User) {
return user.roles.some(role => role === 'admin');
}
}
빌드
auth
lib$ nx build auth --with-deps
--with-deps는 user
lib도 빌드합니다.이제
hello.ts
명령으로 돌아가면 매개변수 누락으로 인해 IDE에서 인증 오류가 표시됩니다.// hello.ts
export default class Hello extends Command {
async run() {
this.log(`Should Not Authenticated : ${new Auth().authenticate({
firstName: 'John',
lastName: 'Doe',
roles: ['user'],
})}`);
this.log(`Should Authenticated : ${new Auth().authenticate({
firstName: 'John',
lastName: 'Doe',
roles: ['admin'],
})}`);
}
}
Should Not Authenticated : false
Should Authenticated : true
❗️❗️중요❗️❗️
You need to link your publishable lib before depending on any other buildable lib, otherwise the npm link will not work because the second lib user in our example is not referenced on registry.
결론
이 기사를 읽은 후 OCLIF에서 NX lib를 사용하는 것은 쉽습니다. 이제 Angular 및 OCLIF 애플리케이션에서 사용 사례를 사용할 수 있습니다.
✅ 우리가 고용하는 방식으로
부담없이 연락하십시오.
Reference
이 문제에 관하여(NX Monorepo의 OCLIF), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/digikare/oclif-on-nx-monorepo-33bo
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(NX Monorepo의 OCLIF), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/digikare/oclif-on-nx-monorepo-33bo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)