[Monoepo] Yarn Workspaces의 명령어

2024-04-12 hit count image

Yarn의 Workspaces를 사용하여 구성된 모노레포에서, 각각의 프로젝트의 scripts에 설정된 명령어를 실행하는 방법에 대해서 알아보도록 하겠습니다.

개요

이번 블로그 포스트에서는 YarnWorkspaces를 사용하여 모노레포를 구성할 때, 각각의 프로젝트의 scripts에 설정된 명령어를 실행하는 방법에 대해서 알아보도록 하겠습니다.

블로그 시리즈

이 블로그는 시리즈로 제작되었습니다. 다음 링크를 통해 다른 블로그 포스트도 확인해 보시기 바랍니다.

예제

각각의 프로젝트의 scripts에 설정된 명령어를 실행하는 방법을 알아보기 위해 예제를 만들어 봅시다. 우선, 다음과 같이 폴더와 파일 구조를 생성합니다.

.
├── package.json
└── src
    ├── module-a
    │   ├── index.js
    │   └── package.json
    └── module-b
        ├── index.js
        └── package.json

module-apackage.json은 다음과 같습니다.

// src/module-a/package.json
{
  "name": "module-a",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  }
}

module-bpackage.json은 다음과 같습니다.

// src/module-b/package.json
{
  "name": "module-b",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  }
}

그리고 module-bindex.js는 다음과 같습니다.

// src/module-b/index.js
console.log('module-b');

module-aindex.js는 다음과 같습니다.

// src/module-a/index.js
console.log('module-a');

require('module-b');

마지막으로 루트 폴더의 있는 package.json 파일을 다음과 같이 수정합니다.

{
  "name": "monorepo",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "private": true,
  "workspaces": {
    "packages": ["src/*"]
  }
}

이제 다음 명령어를 실행하여 패키지를 설치하고, module-amodule-bscipts에 설정된 명령어를 실행해 봅시다.

yarn install
cd ./src/module-a
yarn start

cd ../..

cd ./src/module-b
yarn start

그럼 다음과 같이 module-amodule-b가 잘 실행되는 것을 확인할 수 있습니다.

# cd ./src/module-a
# yarn start
module-a
module-b
# cd ./src/module-b
# yarn start
module-b

Workspaces의 명령어

예제와 같이 다음 명령어를 사용하여 각각의 프로젝트에 설정된 명령어를 실행할 수 있습니다.

yarn install
cd ./src/module-a
yarn start

cd ../..

cd ./src/module-b
yarn start

하지만 매번 해당 프로젝트로 이동한 후 명령어를 실행할 수는 것은 효율적이지 않습니다.

Yarn은 이런 문제를 해결하기 위해 다음과 같은 Workspaces는 명령어를 지원합니다.

yarn workspace <workspace_name> <command>

이 명령어를 활용하면 프로젝트의 폴더로 이동하지 않고도 명령어를 실행할 수 있습니다. <workspace_name>에는 package.jsonname에 설정된 값이 들어가며, <command>에는 scripts에 설정된 명령어가 들어갑니다. 앞선 예제의 명령어를 다음과 같이 실행할 수 있습니다.

yarn workspace module-a start
yarn workspace module-b start

명령어를 실행하면 다음과 같이 결과값이 잘 표시되는 것을 확인할 수 있습니다.

# yarn workspace module-a start
module-a
module-b
# yarn workspace module-b start
module-b

완료

이것으로 YarnWorkspaces로 구성된 모노레포에서 각각의 프로젝트에 설정된 명령어를 간단하게 실행하는 방법에 대해서 알아보았습니다. 여러분도 매번 해당 프로젝트로 이동하여 명령어를 실행하고 계셨다면 Workspaces의 명령어를 사용하여 좀 더 편하게 명령어를 실행해 보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts