Skip to content

CatsMiaow/node-monorepo-workspaces

Repository files navigation

node-monorepo-workspaces

Node.js Monorepo example with pnpm Workspaces

Introduction

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 (versioningchangelogpublishing), so it's more scalable than using Turborepo or Lerna alone.

Continuous Integration

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

Development

# 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-task

Production

pnpm install --frozen-lockfile
pnpm nx run sample-nestjs-app:build
pnpm -F sample-nestjs-app deploy --legacy --prod ./deploy/sample-nestjs-app

Create a new workspace (apps or packages)

  • Add a new directory under apps/ or packages/ and create a package.json.
    • e.g. cd packages/package-name && pnpm init
  • Modify workspace by refer to the sample code. or edit after copy-paste

Apps

Packages

Folders

+-- 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

Links

About

Node.js Monorepo example with pnpm Workspaces

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors