2025-05-12
TIL: I need yet another monorepo tool / Sherif
I recently wrote about monorepos and migrated most of my personal stuff to a monorepo. One caveat i noticed is that if you keep typescript types different across repos, it can cause build issues like this:
./app/resume/page.tsx:105:31
Type error: The inferred type of 'ResumePage' cannot be named without a reference to '.pnpm/@types+react@19.1.0/node_modules/@types/react'. This is likely not portable. A type an
notation is necessary.
Solution
either manually update or use one of the listed tools to "lint" monorepo deps https://turborepo.com/docs/crafting-your-repository/managing-dependencies
- syncpack - most popular but its currently undergoing a rust rewrite...
- manypkg - cli is clean, but the examples are using yarn??
- sherif - naming is a bit weird, otherwise seems good!
I'll try sherif
~/Dev/tengis617/mono main !10 ❯
pnpm dlx sherif@latest 10s 11:26:53 PM
Packages: +2
++
Progress: resolved 7, reused 0, downloaded 2, added 2, done
2 issues found in ./apps/art-gallery/package.json:
⨯ error dependencies should be ordered alphabetically. unordered-dependencies
│ {
│ "dependencies": {
~ ... ← keys aren't sorted.
│ }
│ }
⨯ error Similar Next.js dependencies should use the same version. unsync-similar-dependencies
│ {
│ "dependencies": {
~ "next": "15.3.2",
~ "eslint-config-next": "15.3.1"
│ }
│ }
2 issues found in ./apps/tengis.dev/package.json:
⨯ error Private packages shouldn't have @types/* in dependencies. types-in-dependencies
│ {
│ "private": "true", ← package is private...
│ ...
- "dependencies": { ← but has @types/* in dependencies...
- "@types/js-yaml": "...",
- },
│ ...
+ "devDependencies": { ← instead of devDependencies.
+ "@types/js-yaml": "...",
+ }
│ }
⨯ error Similar Next.js dependencies should use the same version. unsync-similar-dependencies
│ {
│ "dependencies": {
~ "next": "15.3.2",
~ "@next/mdx": "^15.3.2"
│ }
│ }
13 issues found in ./:
⨯ error Dependency typescript has multiple versions defined in the workspace. multiple-dependency-versions
./ 5.8.3 ↑ highest
./apps
art-gallery ^5.8.3 ∼ between
gitmd.dev ^5.8.3 ∼ between
tengis.dev 5.8.3 ↑ highest
./packages
eslint-config ^5.8.2 ∼ between
ui 5.8.2 ↓ lowest
⨯ error Dependency react has multiple versions defined in the workspace. multiple-dependency-versions
./apps
art-gallery ^19.1.0 ↑ highest
gitmd.dev ^19.1.0 ↑ highest
tengis.dev 19.1.0 ∼ between
./packages
ui ^19.1.0 ↑ highest
⨯ error Dependency react-dom has multiple versions defined in the workspace. multiple-dependency-versions
./apps
art-gallery ^19.1.0 ↑ highest
gitmd.dev ^19.1.0 ↑ highest
tengis.dev 19.1.0 ∼ between
./packages
ui ^19.1.0 ↑ highest
⨯ error Dependency @tailwindcss/postcss has multiple versions defined in the workspace. multiple-dependency-versions
./apps
tengis.dev 4.1.6 ↑ highest
art-gallery ^4 ↓ lowest
gitmd.dev ^4 ↓ lowest
⨯ error Dependency @types/node has multiple versions defined in the workspace. multiple-dependency-versions
./packages
ui ^22.14.0 ↑ highest
./apps
tengis.dev 22.13.13 ∼ between
art-gallery ^20 ↓ lowest
gitmd.dev ^20 ↓ lowest
⨯ error Dependency @types/react has multiple versions defined in the workspace. multiple-dependency-versions
./apps
art-gallery ^19.1.3 ↑ highest
gitmd.dev ^19.1.3 ↑ highest
tengis.dev 19.1.3 ∼ between
./packages
ui 19.1.0 ↓ lowest
⨯ error Dependency @types/react-dom has multiple versions defined in the workspace. multiple-dependency-versions
./apps
art-gallery ^19.1.3 ↑ highest
gitmd.dev ^19.1.3 ↑ highest
tengis.dev 19.1.3 ∼ between
./packages
ui 19.1.1 ↓ lowest
⨯ error Dependency eslint has multiple versions defined in the workspace. multiple-dependency-versions
./apps
art-gallery ^9.26.0 ↑ highest
gitmd.dev ^9.26.0 ↑ highest
./packages
eslint-config ^9.26.0 ↑ highest
ui ^9.25.0 ↓ lowest
⨯ error Dependency tailwindcss has multiple versions defined in the workspace. multiple-dependency-versions
./apps
tengis.dev 4.1.6 ↑ highest
art-gallery ^4 ↓ lowest
gitmd.dev ^4 ↓ lowest
⨯ error Dependency @radix-ui/react-slot has multiple versions defined in the workspace. multiple-dependency-versions
./apps
gitmd.dev ^1.2.0 ↑ highest
tengis.dev ^1.1.2 ↓ lowest
⨯ error Dependency lucide-react has multiple versions defined in the workspace. multiple-dependency-versions
./apps
gitmd.dev ^0.501.0 ↑ highest
tengis.dev ^0.484.0 ↓ lowest
⨯ error Dependency tw-animate-css has multiple versions defined in the workspace. multiple-dependency-versions
./apps
gitmd.dev ^1.2.5 ↑ highest
tengis.dev ^1.2.4 ↓ lowest
⨯ error Dependency eslint-plugin-react has multiple versions defined in the workspace. multiple-dependency-versions
./apps
gitmd.dev ^7.37.5 ↑ highest
./packages
eslint-config ^7.37.4 ↓ lowest
1 issue found in ./apps/gitmd.dev/package.json:
⨯ error Similar Next.js dependencies should use the same version. unsync-similar-dependencies
│ {
│ "dependencies": {
~ "next": "15.3.2",
~ "eslint-config-next": "15.3.1"
│ }
│ }
18 issues found (18 ⨯, 0 ⚠️, 0 ✓) across 6 packages in 2.676667ms.
Note: use `-i` to ignore dependencies, `-r` to ignore rules, `-p` to ignore packages, and `-f` to autofix fixable issues.
zero dependencies and gives a nice output.
After fixing everything with pnpm dlx sherif@latest --fix
:
~/Dev/tengis617/mono main !7 ?1 ❯
pnpm run sherif:fix 11:40:10 PM
> mono@ sherif:fix /Users/tengis/Dev/tengis617/mono
> pnpm dlx sherif@latest --fix
✓ No issues found
Yaay! Now i can manage dependencies across apps easily!