link-workspace-packages
Link workspace packages in monorepos (npm, yarn, pnpm, bun). USE WHEN: (1) you just created or generated new packages and need to wire up their dependencies, (2) user imports from a sibling package and needs to add it as a dependency, (3) you get resolution errors for workspace packages (@org/*) lik
By nrwl · 2,446 installs
npx skills add nrwl/nx-ai-agents-config --skill link-workspace-packages
Source repository · Upstream listing
Link Workspace Packages
Add dependencies between packages in a monorepo. All package managers support workspaces but with different syntax.
Detect Package Manager
Check whether there's a packageManager field in the root level package.json .
Alternatively check lockfile in repo root:
pnpm lock.yaml → pnpm
yarn.lock → yarn
bun.lock / bun.lockb → bun
package lock.json → npm
Workflow
1. Identify consumer package (the one importing)
2. Identify provider package(s) (being imported)
3. Add dependency using package manager's workspace syntax
4. Verify symlinks created in consumer's node modules/
pnpm
Uses workspace: protocol symlinks only created when explicitly declared.
Result in package.json :
yarn (v2+/berry)
Also uses workspace: protocol.
Result in package.json :
npm
No workspace: protocol. npm auto symlinks workspace packages.
Result in package.json :
npm resolves to local workspace automatically during install.
bun
Supports workspace: protocol (pnpm compatible).
Result in package.json :
Examples
Example 1: pnpm link ui lib to app
Example 2: npm link multiple packages
Example 3: Debug "Cannot find module"
1. Check if dependency is declared in consumer's package.json
2. If not, add it using appropriate command above
3. Run install ( pnpm install , npm install , etc.)
Notes
Symlinks appear in <consumer /node modules/@org/<package
Hoisting differs by manager:
npm/bun: hoist shared deps to root node modules
pnpm: no hoisting (strict isolation, prevents phantom deps)
yarn berry: uses Plug'n'Play by default (no node modules )
Root package.json should have "private": true to prevent accidental publish