packlink is a minimal local package publishing tool for pnpm that allows you to:
- Publish a package locally by creating a tarball with
pnpm pack
and storing it in a cache directory. - Add a locally published package to another project's dependencies by updating its
package.json
with the local tarball reference.
This tool is useful for testing package changes locally without publishing to a remote registry. It's most useful within monorepos managed by pnpm workspaces that use local package versions like catalog:
and workspace:*
.
- Local Publishing: Creates a tarball of your package using
pnpm pack
and stores it under~/.config/packlink/<package-name>-<version>-<timestamp>.tgz
. - Local Dependency Linking: Updates the consumer project's
package.json
to reference the local tarball. - Auto-Watching: Republish or readd packages automatically when changes are detected.
- Simple and Minimal: Focuses on local publishing without added complexity and zero dependencies.
You can run packlink
directly via pnpm dlx
:
pnpm dlx packlink <command>
Or alternatively, install it globally:
pnpm install -g packlink
packlink <command>
Publishes a package locally by creating a tarball with pnpm pack
and storing it in your local cache directory (~/.config/packlink/<package-name>-<version>-<timestamp>.tgz
).
packlink publish
Use --watch
to watch for changes in your build directory (default is dist
). Whenever a file in that directory changes, packlink will automatically republish. You can optionally specify a different directory to watch:
packlink publish --watch # Watch 'dist' by default
packlink publish --watch=lib # Watch the 'lib' directory instead of 'dist'
Adds a locally published package to another project's dependencies by updating its package.json
with the local tarball reference:
packlink add <package-name>
Use --watch
to automatically update the dependency if a new tarball for the specified package is published. packlink will watch the cache directory (~/.config/packlink/
) and re-run the add
process when a new tarball is published:
packlink add <package-name> --watch