Migrate monorepo to pnpm and add Expo React Native mobile client - #12
Merged
Conversation
- Replace npm workspaces with pnpm-workspace.yaml (apps/*) - Add .npmrc node-linker=hoisted (required by Metro/React Native) - Set packageManager to pnpm@11; drop package-lock.json for pnpm-lock.yaml - Point dev:mobile at pnpm filter - Fix fresh-resolution drift: add dotenv dep, pin @types/express-serve-static-core 5.1.0, bump frontend lib to ES2022, make coin 'other' field optional (zod), disable backend .d.ts emit to avoid TS2742
Scaffold Expo (SDK 54, expo-router) app in apps/mobile as the CoinRadar mobile client. Includes monorepo metro.config.js; no babel.config.js since SDK 54 auto-configures babel-preset-expo.
BODMAT
force-pushed
the
chore/migrate-to-pnpm
branch
from
July 27, 2026 11:10
536f1f5 to
4c62fea
Compare
Add pnpm/action-setup, use pnpm cache, replace npm ci / npm run with pnpm install --frozen-lockfile and pnpm run.
BODMAT
force-pushed
the
chore/migrate-to-pnpm
branch
from
July 27, 2026 11:14
83b80f4 to
8b05bae
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three related changes on this branch:
incompatible with Expo/Metro (it splits the package tree), which blocked
adding a mobile app to the workspace.
apps/mobile, reusingthe existing backend API.
What changed
pnpm migration (
61f2ea2)pnpm-workspace.yaml(apps/*) replaces theworkspacesfield inpackage.json.npmrcwithnode-linker=hoisted— flatnode_modulesrequired by Metro/React NativepackageManager: pnpm@11;package-lock.jsonremoved in favor ofpnpm-lock.yamldev:mobilenow runspnpm --filter mobile run startdotenvdependency to backend (phantom dep, exposed by pnpm strictness)@types/express-serve-static-coreto5.1.0(5.1.2 types query/params asstring | string[])lib/targetto ES2022 (forArray.at)otherschema field optional (zod 4.4 treatsz.any()keys as required).d.tsemit to avoid TS2742 non-portable-type errors under pnpmMobile client (
4c62fea)expo-router, TypeScript) inapps/mobilemetro.config.js(resolves deps from local + workspace-rootnode_modules)babel.config.js— SDK 54 auto-configuresbabel-preset-expo; a hand-writtenone breaks
expo-router'sEXPO_ROUTER_APP_ROOTinliningCI/CD to pnpm (
8b05bae)ci.ymlanddeploy.yml: addpnpm/action-setup, switchsetup-nodecache topnpmnpm ci→pnpm install --frozen-lockfile;npm run …→pnpm run …node-version20 → 22 (pnpm 11 requires Node ≥ 22.13; Node 20 is also deprecated on runners)node:sqlitecrash on Node 20Verification
pnpm install --frozen-lockfile+ native builds (bcrypt, esbuild, prisma) OKpnpm build(turbo) — backend + frontend greenexpo export --platform android— mobile bundles successfullypnpm dev) unaffectedNotes
allowBuildsinpnpm-workspace.yamlssh2's optional native binding may skip compilation on machines without build tools; it falls back to pure JS and is only used by integration tests