@rnm/pm
v0.5.2
Published
Unified Package Manager for Node.js
Downloads
719
Maintainers
Readme
📦 PM
A unified package manager for Node.js that supports npm, yarn, and pnpm. This human-friendly Corepack wrapper lets you forget about npm, yarn, and pnpm — just use the pm command for everything.
Highlights
- 📦 All-in-One: Supports npm, yarn, and pnpm without extra installations.
- 🎯 Auto Detect: Automatically detects the correct package manager.
- ⬇️ Auto Fallback: Automatically falls back to npm if no package manager is detected.
- 🔀 Version Management: Automatically switches to the proper version of the detected package manager.
- ⚡️ Zero Configuration: No configuration required. Just install globally and start using it.
- 🌍 Global Safety: Does not modify or override existing global package managers.
- 🪶 Lightweight: Tiny codebase (< 300 lines).
Installation
npm install -g @rnm/pmUsage
Inside Projects
When inside a project directory, pm and px are aliases for npm/yarn/pnpm and npx/yarnpkg/pnpx respectively. The choice depends on the project's configuration. Falls back to npm and npx if no specific package manager is detected.
Configure packageManager or devEngines.packageManager in package.json:
{
"packageManager": "[email protected]",
"devEngines": {
"packageManager": {
"name": "pnpm",
"version": "10.0.0"
}
}
}Commands work exactly like the underlying package manager:
# pm = smart alias for npm/yarn/pnpm
pm install # → npm/yarn/pnpm install
pm run build # → npm/yarn/pnpm run build
pm --help # → npm/yarn/pnpm --help
pm --version # → npm/yarn/pnpm --version
# px = smart alias for npx/yarnpkg/pnpx
px create-react-app my-app --template typescript # → npx/yarnpkg/pnpx create-react-app my-app --template typescript
px tsx --watch src/index.ts # → npx/yarnpkg/pnpx tsx --watch src/index.tsOutside Projects
When outside project directories, pm and px are aliases for npm and npx. These are typically used for global operations.
# pm = alias for npm
pm install -g typescript@latest # → npm install -g typescript@latest
pm list -g --depth=0 # → npm list -g --depth=0
# px = alias for npx
px create-react-app my-app --template next # → npx create-react-app my-app --template next
px degit user/repo my-app # → npx degit user/repo my-appAdvanced Usage
The pm-cli command provides additional utilities for advanced use cases.
Enable Shim Commands
Use pm-cli enable-shim to create symbolic links that replace the native package manager commands with @rnm/pm equivalents:
# Enable shims for all package managers (npm, yarn, pnpm, npx, yarnpkg, pnpx)
pm-cli enable-shim
# Enable shims for specific package managers only
pm-cli enable-shim npm yarn
pm-cli enable-shim pnpmThis command creates symbolic links in your global installation directory, so when you run npm, yarn, or pnpm, they will automatically use the @rnm/pm detection logic.
⚠️ Warning: This will override your existing global package manager commands. Use with caution and ensure you understand the implications.
Differences from Corepack
- Field Detection:
@rnm/pmdetectspackageManager,devEngines, andenginesfields inpackage.json, while Corepack only supportspackageManageranddevEngines. - Version Range Support:
@rnm/pmsupports version ranges (e.g.,^10.0.0) inpackageManageranddevEngines.packageManager.versionfields, while Corepack only accepts specific versions. - Lock File Detection:
@rnm/pmautomatically detects lock files (package-lock.json,yarn.lock,pnpm-lock.yaml) to determine the package manager, while Corepack does not. - Environment Variables:
@rnm/pmignoresCOREPACK_*environment variables for non-configurable behavior, while Corepack respects them. - Configuration Files:
@rnm/pmignores.corepack.envfiles, while Corepack reads them for configuration. - Registry Configuration:
@rnm/pmusesnpm config get registryfor package installation, while Corepack uses theCOREPACK_NPM_REGISTRYenvironment variable. - Transparency Features:
@rnm/pmdoes not provide transparency features, unlike Corepack. See Corepack's config.json for details.
Migration from Corepack
- Install
@rnm/pmglobally usingnpm install -g @rnm/pm. - Replace
npm,yarn, andpnpmwithpmin your projects.
Show your support
Give a ⭐️ if this project helped you!
License
MIT
