PluginBench
Skill
Review
Audit score 70

link-workspace-packages

nrwl/nx-ai-agents-config

Link workspace packages in monorepos using npm, yarn, pnpm, or bun.

What is link-workspace-packages?

Adds dependencies between packages in a monorepo by leveraging each package manager's workspace linking commands. Use this when you've created new packages, need to wire up sibling package imports, or encounter resolution errors like "cannot find module" or "TS2307" for workspace packages.

  • Detects the package manager (npm, yarn, pnpm, bun) from lockfile or package.json
  • Adds workspace dependencies using the correct syntax for each manager (workspace: protocol or auto-symlink)
  • Creates symlinks in consumer package's node_modules for local workspace packages
  • Resolves import errors for @org/* scoped packages without manual tsconfig or package.json patching
  • Supports multi-package linking in a single command
  • Handles different hoisting strategies across package managers

How to install link-workspace-packages

npx skills add https://github.com/nrwl/nx-ai-agents-config --skill link-workspace-packages
Prerequisites
  • Monorepo with workspace configuration (pnpm-workspace.yaml, package.json workspaces field, etc.)
  • Package manager installed (npm, yarn, pnpm, or bun)
Claude Code
Cursor
Windsurf
Cline

How to use link-workspace-packages

  1. 1.Detect which package manager is in use by checking for packageManager field in root package.json or identifying the lockfile (pnpm-lock.yaml, yarn.lock, bun.lock, or package-lock.json)
  2. 2.Identify the consumer package (the one doing the importing) and the provider package(s) (being imported)
  3. 3.Run the appropriate add command for your package manager: pnpm add @org/ui --filter @org/app --workspace (pnpm), yarn workspace @org/app add @org/ui (yarn), npm install @org/ui --workspace @org/app (npm), or cd packages/app && bun add @org/ui (bun)
  4. 4.Verify symlinks were created in the consumer's node_modules/@org/ directory
  5. 5.Run install if needed to finalize the linking

Use cases

Good for
  • After generating or creating new packages, wire up their dependencies to other workspace packages
  • User imports from a sibling package and you need to add it as a declared dependency
  • Resolve "cannot find module" or "failed to resolve import" errors for workspace packages
  • Fix TypeScript TS2307 errors when workspace packages aren't properly linked
  • Link multiple packages to a consumer in one operation
Who it's for
  • Monorepo maintainers
  • Full-stack developers working with multiple interdependent packages
  • Teams using pnpm, yarn, npm, or bun workspaces
  • Developers troubleshooting workspace resolution errors

link-workspace-packages FAQ

What's the difference between pnpm, yarn, npm, and bun workspace linking?

pnpm and bun use the workspace: protocol in package.json and create strict symlinks without hoisting. yarn (v2+) also uses workspace: protocol. npm auto-symlinks workspace packages without a special protocol and hoists shared dependencies to root node_modules.

How do I know if a workspace package is properly linked?

Check the consumer's node_modules/@org/ directory for a symlink to the provider package. If it's missing, the dependency wasn't declared in package.json or install wasn't run.

Should I manually edit tsconfig paths or package.json to fix workspace imports?

No. Use the package manager's workspace commands instead. Manual edits bypass the linking mechanism and won't create the necessary symlinks.

What does 'workspace:*' or 'workspace:^' mean in package.json?

These are workspace protocols used by pnpm, yarn, and bun to indicate a local workspace dependency. npm uses a regular version specifier like '*' and resolves it locally during install.

Why am I still getting 'cannot find module' after adding the dependency?

Run install (pnpm install, npm install, yarn install, or bun install) to create the symlinks. Also verify the dependency is correctly declared in the consumer's package.json.

Full instructions (SKILL.md)

Source of truth, from nrwl/nx-ai-agents-config.


name: link-workspace-packages description: '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/*) like "cannot find module", "failed to resolve import", "TS2307", or "cannot resolve". DO NOT patch around with tsconfig paths or manual package.json edits - use the package manager''s workspace commands to fix actual linking.'

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.

# From consumer directory
pnpm add @org/ui --workspace

# Or with --filter from anywhere
pnpm add @org/ui --filter @org/app --workspace

Result in package.json:

{ "dependencies": { "@org/ui": "workspace:*" } }

yarn (v2+/berry)

Also uses workspace: protocol.

yarn workspace @org/app add @org/ui

Result in package.json:

{ "dependencies": { "@org/ui": "workspace:^" } }

npm

No workspace: protocol. npm auto-symlinks workspace packages.

npm install @org/ui --workspace @org/app

Result in package.json:

{ "dependencies": { "@org/ui": "*" } }

npm resolves to local workspace automatically during install.


bun

Supports workspace: protocol (pnpm-compatible).

cd packages/app && bun add @org/ui

Result in package.json:

{ "dependencies": { "@org/ui": "workspace:*" } }

Examples

Example 1: pnpm - link ui lib to app

pnpm add @org/ui --filter @org/app --workspace

Example 2: npm - link multiple packages

npm install @org/data-access @org/ui --workspace @org/dashboard

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