syncpack: JS모노레포에서 의존성 버전을 일관되게 유지
.syncpackrc
{
"$schema": "<https://unpkg.com/syncpack/dist/schema.json>",
"formatRepository": false,
"formatBugs": false,
"indent": "\t",
"versionGroups": [
{
"label": "Expo app uses different TypeScript, @types/react, and React versions",
"packages": ["@web-memo/app"],
"dependencies": ["typescript", "@types/react", "react", "react-dom"],
"isIgnored": true
},
{
"label": "Shared package supports both React 18 and 19 via peerDeps",
"packages": ["@web-memo/shared"],
"dependencies": ["react", "react-dom"],
"dependencyTypes": ["peer"],
"isIgnored": true
},
{
"label": "Use pinned versions for React core",
"dependencies": ["react", "react-dom"],
"dependencyTypes": ["!peer"],
"pinVersion": "18.3.1"
},
{
"label": "Use workspace protocol for internal packages",
"dependencies": ["@web-memo/**", "@web-memo/**"],
"dependencyTypes": ["!peer"],
"pinVersion": "workspace:*"
}
]
}
expo앱은 54 SDK부터 버전이 다르기에 다른 패키지와 TS, react 버전을 다르게 사용
{
"label": "Expo app uses different TypeScript, @types/react, and React versions",
"packages": ["@web-memo/app"],
"dependencies": ["typescript", "@types/react", "react", "react-dom"],
"isIgnored": true
},
shared패키지의 peerDepdencies의 react는 app패키지(react@19)에 지원하기 위해 예외
{
"label": "Shared package supports both React 18 and 19 via peerDeps",
"packages": ["@web-memo/shared"],
"dependencies": ["react", "react-dom"],
"dependencyTypes": ["peer"],
"isIgnored": true
},
react, react-dom은 18.3.1로 버전 통일
{
"label": "Use pinned versions for React core",
"dependencies": ["react", "react-dom"],
"dependencyTypes": ["!peer"],
"pinVersion": "18.3.1"
},
내부 패키지는 workspace:*으로 버전 통일
{
"label": "Use workspace protocol for internal packages",
"dependencies": ["@web-memo/**", "@web-memo/**"],
"dependencyTypes": ["!peer"],
"pinVersion": "workspace:*"
}