Loading...
Loading...
Best practices for pnpm package manager, workspace management, and monorepo configuration
npx skill4agent add mindrally/skills pnpmpnpm-lock.yamlnpm install -g pnpmcorepack enable && corepack prepare pnpm@latest --activatepackage.json{
"packageManager": "pnpm@9.0.0"
}pnpm-workspace.yamlpackages:
- 'apps/*'
- 'packages/*'
- 'tooling/*'package.jsonpnpm installpnpm add lodash --filter @org/my-app
pnpm add -D typescript --filter @org/my-lib{
"dependencies": {
"@org/shared-utils": "workspace:*",
"@org/ui": "workspace:^"
}
}workspace:*workspace:^workspace:~pnpm --filter @org/my-app dev
pnpm --filter "./apps/*" build
pnpm --filter "...@org/my-lib" test # Include dependents
pnpm --filter "@org/my-lib..." build # Include dependencies--filter <package-name>--filter "./path/*"--filter "...<pkg>"--filter "<pkg>..."pnpm -r run build # Run in all packages
pnpm -r --parallel run dev # Run in parallel
pnpm -r --stream run test # Stream output{
"scripts": {
"build": "pnpm -r run build",
"dev": "pnpm --filter @org/web dev",
"lint": "pnpm -r run lint",
"test": "pnpm -r run test"
}
}.npmrc# Strict mode - no hoisting
hoist=false
# Selective hoisting
public-hoist-pattern[]=*eslint*
public-hoist-pattern[]=*prettier*
# Shamefully hoist everything (not recommended)
shamefully-hoist=true.npmrcauto-install-peers=true
strict-peer-dependencies=falsepackage.json{
"pnpm": {
"overrides": {
"lodash": "^4.17.21",
"foo@1.x": "npm:bar@^2.0.0"
}
}
}pnpm publishpnpm fetchCOPY pnpm-lock.yaml ./
RUN pnpm fetch
COPY . ./
RUN pnpm install --offline--frozen-lockfilepnpm-lock.yaml.npmrcworkspace:*package.jsonpnpm dedupepnpm auditpnpm why <package>engine-strict=true