pnpm 모노레포 구성하기

2024. 11. 13. 21:30컴퓨터언어/Node.js

728x90
반응형

Next.js 15와 TypeScript를 사용하고, 패키지 매니저로 pnpm을 활용하여 모노레포를 구성해보자.

 

보통 이러한 설정은 여러 사이트를 포함하는 apps 폴더와 디자인 시스템 등을 담는 packages 폴더로 구성한다.

 

1. 프로젝트 초기화 및 pnpm 설치


   먼저, 프로젝트 루트를 생성하고 pnpm을 설치한다.

mkdir my-monorepo
cd my-monorepo
npm install -g pnpm
pnpm init

 

 

2. pnpm 워크스페이스 설정

 


루트에 pnpm-workspace.yaml 파일을 만들고, apps와 packages 폴더를 워크스페이스로 지정한다.


packages:
  - 'apps/**'
  - 'packages/**'

 

3. 디렉토리 구조 설정

 

 


apps와 packages 폴더를 만들고, 각 폴더 내에 필요한 프로젝트를 추가한다.

mkdir apps packages
mkdir apps/site1 apps/site2
mkdir packages/design-system
4. 각 프로젝트 초기화 및 의존성 설치

 

각 프로젝트 폴더에서 package.json을 초기화하고 필요한 의존성을 설치한다.

cd apps/site1
npx create-next-app@latest
cd apps/site2
npx create-next-app@latest
cd packages/design-system
mkdir something-my-dirs
pnpm init
pnpm add styled-components

 

5. 공통 의존성 관리


모노레포에서는 루트에서 공통 의존성을 관리할 수 있다.

 

예를 들어, ESLint와 Prettier를 루트에 설치하여 모든 프로젝트에서 사용할 수 있도록 할 수 있다.

 

pnpm add -w eslint prettier


이렇게 하면 각 프로젝트에서 별도로 설치할 필요 없이 공통 설정을 공유할 수 있다.

 

 

6. 프로젝트 간 의존성 설정

 

 

packages 내의 패키지를 apps 내의 프로젝트에서 사용하려면, 해당 패키지를 의존성으로 추가한다.

 

예를 들어, site1에서 design-system을 사용하려면 다음과 같이 설정한다.

cd apps/site1
pnpm add @my-monorepo/design-system --filter site1

 

이렇게 하면 site1 프로젝트에서 design-system 패키지를 로컬 의존성으로 사용할 수 있다.

 

또한 심볼 링크로서 단순 복제가 아니다.

 

7. 빌드 및 실행

 


각 프로젝트의 package.json에 빌드 및 실행 스크립트를 정의하고, pnpm을 통해 실행한다.

 

예를 들어, site1의 package.json에 다음과 같이 스크립트를 추가한다.

 

"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
}

 

그러면 루트에서 다음 명령어로 site1을 실행할 수 있다.

pnpm --filter site1 dev
728x90
반응형