Node.js Monorepo example with pnpm Workspaces
Monorepo structure of TypeScript and NestJS project using Nx and pnpm Workspaces
- Not using NestJS monorepo mode.
- Use Nx on top of the pnpm workspace.
- Nx alone can handle releases (
versioning→changelog→publishing), so it's more scalable than usingTurborepoorLernaalone.
pnpm i --frozen-lockfile
pnpm run lint
pnpm run test
pnpm run build
# The above command can also be used like this:
pnpm nx run-many -t=lint,test,build
# Run tasks affected
pnpm nx affected -t=build# package manage to a specific workspace
pnpm -F sample-nestjs-app add install-package
pnpm -F sample-nestjs-app remove uninstall-package
pnpm -F sample-nestjs-app install
# launch the development process
pnpm nx run sample-nestjs-app:dev
# execute pnpm tasks
pnpm nx run workspace-name:any-task
pnpm -F workspace-name run any-taskpnpm install --frozen-lockfile
pnpm nx run sample-nestjs-app:build
pnpm -F sample-nestjs-app deploy --legacy --prod ./deploy/sample-nestjs-app- Add a new directory under
apps/orpackages/and create apackage.json.- e.g.
cd packages/package-name && pnpm init
- e.g.
- Modify workspace by refer to the sample code. or edit after copy-paste
+-- apps
| +-- sample-app // TypeScript simple sample-app
| +-- sample-nestjs-app // NestJS server sample-app
+-- packages
| +-- sample-lib // TypeScript simple sample-package
| +-- sample-nestjs-lib // NestJS module sample-package
+-- eslint.config.mjs // ESLint common configuration
+-- vitest.config.ts // Vitest common configuration
+-- nx.json // Nx task pipeline configuration