๐ pnpm catalog๋ก monorepo workspace ํจํค์ง ๋ฒ์ ํต์ผํ๊ธฐ
์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ monorepo๋ก ๋ฌถ์ผ๋ฉด ๋ฐ๋์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ํจํค์ง๊ฐ ์๊ธฐ ๋ง๋ จ์ ๋๋ค.
์๋ฅผ ๋ค์๋ฉด react, typescript, prettier, eslint, @types/.... ๋ฑ๋ฑ๋ฑ
์๋ฌด๋๋ ํ๋์ workspace์์ ์ค๋ณต๋๋ ํจํค์ง๋ค์ ๋์ผํ ๋ฒ์ ์ผ๋ก ํต์ผํ๋ฉด ์ฌ๋ฌ๋ชจ๋ก ๊ด๋ฆฌํ๊ธฐ ์ฉ์ดํ๋ค๊ณ ์๊ฐ๋๋๋ฐ์.
์ด๋ด ๋ pnpm Catalog protocol์ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ฌํ ๊ณ ๋ฏผ๋ค์ ํ๋ฐฉ์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๐ pnpm Catalog๋?
pnpm Catalog๋ workspce ๊ธฐ๋ฅ์ผ๋ก, ์์กด์ฑ ๋ฒ์ ๋ฒ์๋ฅผ ์ ์ํด ๋ ์์์ ๋๋ค.
ํจํค์ง๋ค์ ๋ฒ์ ์ pnpm-workspace.yaml์ catalog๋ก ์ ์ํด ๋๊ณ , ์ ์ํด ๋ catalog๋ ๊ฐ ํ๋ก์ ํธ package.json์ ํจํค์ง ๋ฒ์ ์ผ๋ก ์
๋ ฅํ๋ฉด ๋ฉ๋๋ค.
/** pnpm-workspace.yaml **/
packages:
- "apps/*"
- "packages/*"
catalog:
typescript: ^5
react: ^18
react-dom: ^18
"@types/react": ^18
"@types/react-dom": ^18
/** packages/ui/package.json **/
{
"name": "@repo/ui",
"version": "0.0.0",
"private": true,
"exports": {
"./*": "./src/*.tsx"
},
"scripts": {
"...": "..."
},
"devDependencies": {
"...": "...",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"typescript": "catalog:"
},
"dependencies": {
"react": "catalog:",
"react-dom": "catalog:"
}
}
๋ฐ๊พผ ๋ฒ์ ์ ์ ์ ์ฅํด์ค ๋ค ์ธ์คํจ ํด์ฃผ๊ฒ ๋๋ฉด, ์๋์ผ๋ก pnpm-workspace.yaml์ ์ ์ํด ๋ ๋ฒ์ ์ ์ฐธ์กฐํ์ฌ ์ค์นํ๊ฒ ๋ฉ๋๋ค.

pnpm-lock.yaml ํ์ผ์ ๋ณด๋ฉด ์ค์น๊ฐ ์ ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ Catalogs๋ก ์ฌ๋ฌ Catalog ์ ์ํ๊ธฐ
๋ถ๊ฐํผํ๊ฒ ํ๋์ catalog๋ก ๋ฒ์ ์ ํ๋๋ก ํต์ผ์ํค์ง ๋ชปํ๋ค๋ฉด Catalogs๋ก ๋ฒ์ ๋ฌถ์๋ค์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
/** pnpm-workspace.yaml **/
packages:
- "apps/*"
- "packages/*"
catalog:
typescript: ^5
catalogs:
react18:
react: ^18
react-dom: ^18
react19:
react: ^19
react-dom: ^19
{
"name": "@example/components",
"dependencies": {
"react": "catalog:react18",
}
}
์์ ๊ฐ์ด catalogs ์๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด catalog:๊ทธ๋ฃน๋ช ์ผ๋ก ๊ฐ ๋ฒ์ ๋ค์ ๋ฌถ์์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐ ์ฃผ์ํ ์
์ฒ์์ catalog๋ฅผ ์ ์ฉํ ํ install์ด ์๋์ด ๊ธด ์๊ฐ ์ฝ์ง์ ํ์ต๋๋ค.
ERR_PNPM_SPEC_NOT_SUPPORTED_BY_ANY_RESOLVER typescript@catalog: isn't supported by any available resolver.

์์ธ์ ์ฐพ์ผ๋ ค pnpm ๊ณต์ ๋ฌธ์์ ํ์ผ์์ด ์ดํด๋ณด๋ค, ํน์ ์ถ์ด ๋ฒ์ ์ ๋ณด๋ฅผ ์ ๋ถ ํ์ธํ๋ pnpm v9.5 ์ด์๋ถํฐ ์ง์ํ๋ ๊ธฐ๋ฅ์์ ์๊ฒ ๋์์ต๋๋ค.

Catalog ๊ธฐ๋ฅ ์ฌ์ฉ ์์ ์ธ ๋ถ๋ค์ pnpm update ํน์ corepack์ ์ฌ์ฉํด pnpm v9.5 ์ด์์ผ๋ก ๋ง์ถฐ์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
Catalogs | pnpm
"Catalogs" are a workspace feature for defining dependency version ranges as reusable constants. Constants defined in catalogs can later be referenced in package.json files.
pnpm.io
'Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Turborepo์ PNPM์ผ๋ก Monorepo ์์ํ๊ธฐ (0) | 2025.03.16 |
|---|---|
| ์นํ๋ก์ ํธ ๋ฌธ์์ธ์ฆ ๊ตฌํํ๊ธฐ with ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ (0) | 2022.05.30 |
| REST API์ ๋ํด (0) | 2022.05.23 |
| ๊ตญ๋น ์๋ฐ ์ธ๋ฏธ ํ๋ก์ ํธ - ์๋ฐ ํ๋ซํผ GOING (0) | 2022.03.27 |
| CSS ํ์ผ ์์ ํ ์ ์ฉ์ด ์๋ ๋ (0) | 2022.02.17 |
์คํ ์ฑํ
๋๊ธ