Skip to main content

Overview

The pm link command creates symbolic links between local packages, allowing you to develop and test packages together without publishing them.

Syntax

Arguments

string[]
Arguments passed directly to your package manager’s link command

Examples

In the package you want to link:
Output
This makes the package available globally for linking. In the project that needs the package:
Output
Link directly using a file path:
Output

Use Cases

Local Development

Develop a library and application together:
1

Create Global Link

In your library project:
2

Link in Application

In your application project:
3

Develop and Test

Changes in ui-library are immediately reflected in web-app

Testing Unpublished Changes

Test changes before publishing to npm:

Monorepo Alternative

While monorepos handle this automatically, pm link is useful for:
  • Cross-monorepo development
  • Testing packages outside their monorepo
  • Temporary connections between projects

How It Works

From src/commands/link.ts:10-17:
The command:
  1. Detects your package manager
  2. Passes all arguments to the native link command
  3. Creates symbolic links in node_modules

Package Manager Behavior

pnpm requires --global flag for creating global links. Better PM passes this through automatically.

Verification

Check if a package is linked:
Output
The -> indicates a symbolic link.

Troubleshooting

If changes aren’t reflected:
  1. Rebuild the linked package:
  2. Check if link exists:
  3. Re-create the link:

TypeScript Issues

For TypeScript projects, you may need:
tsconfig.json

Build Watch Mode

For real-time changes, run the linked package in watch mode:

Best Practices

Remember to unlink before publishing or deploying to avoid development-only dependencies.
  • Document links - Keep track of which packages are linked
  • Use watch mode - Run builds in watch mode for instant updates
  • Unlink after testing - Remove links when done to avoid confusion
  • Consider alternatives - For monorepos, use workspace features instead
  • pm unlink - Remove symbolic links
  • pm ls - List dependencies and check links
  • pm install - Install dependencies normally