๐ 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 |
๋๊ธ