Post

모노레포 세팅

모노레포 세팅

레포지토리 생성

1
2
➜ git clone study-monorepo
➜ code study-monorepo

yarn세팅

1
2
3
➜ yarn -v  //yarn 버전확인
➜ yarn set version berry // 해당 폴더에서만 yarn berry 사용
➜ yarn init -y // 프로젝트 설정

package.json

1
2
3
4
5
6
7
8
9
{
  "name": "study-monorepo",
  "workspaces": {
    "packages": [
      "package/*"
    ]
  },
  "packageManager": "yarn@4.5.1"
}

vite + React

1
2
➜ mkdir packages
➜ cd packages
1
2
3
4
➜ yarn create vite project1
➜ cd project1
➜ yarn
➜ yarn dev

App.tsx에서 타입스크립트 에러 시

https://yarnpkg.com/getting-started/editor-sdks

1
2
3
➜ cd ../../ //root 이동
➜ yarn add -D typescript prettier eslint
➜ yarn dlx @yarnpkg/sdks vscode

vscode에서 타입스크립트 사용 지정

image or image-1 image-2

tsconfig.base.json

1
2
cd ../../ //root 이동
➜ mkdir tsconfig.base.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
  "compilerOptions": {
    "target": "ESNext", //최신자바스크립트
    "useDefineForClassFields": true,
    "lib": ["DOM", "DOM.Iterable", "ESNext"],
    "allowJs": false,
    "skipLibCheck": false,
    "esModuleInterop": false,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  },
}

tsconfig.json

1
➜ cd packages/project1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "extends": "../../tsconfig.base.json",
  "files": [],
  "compilerOptions": {
    "baseUrl": ".",
    "types": ["vite/client"],
    "paths": {
      "~/*": ["src/*", "static/*"]
    }
  },
  "references": [
    { "path": "./tsconfig.app.json" },
    { "path": "./tsconfig.node.json" }
  ]
}

package 내의 project간 코드 공유

#### 다른 프로젝트도 세팅하기

1
2
 ➜ cd package/common
 ➜ yarn init
1
2
3
4
5
6
//package.json
{
  "name": "@monorepo/common",
  "packageManager": "yarn@4.5.1",
  "main": "index.ts"
}
1
2
3
4
//index.ts
const str: string = "이 변수를 공유해보자!";
export default str;

1
2
 ➜ cd ../../ //roo이동
 ➜ yarn //프로젝트 간 연결
1
2
3
4
5
6
7
8
9
10
11
➜ cd package/project1

//App.tsx
import "./App.css";
import str from "@monorepo/common";
function App() {
  return <>{str}</>;
}

export default App;

1
 ➜ yarn workspace project1 dev

image-3

root에서 run dev

1
2
 ➜ yarn workspace user dev
 // yarn workspace 프로젝트이름 스크립트이름

참고자료

모노레포 템플릿 레포지토리
@minboykim-Yarn berry로 모노레포 구성하기
@minify yarn berry로 workspace(monorepo) 구성하기

This post is licensed under CC BY 4.0 by the author.