nvm-rust
nvm-rust copied to clipboard
A cross-platform node version manager that doesn't suck
nvm(-rust)
Cross platform nvm that doesn't suck™
Installation
Binaries
- Download binary for your OS from the Releases
- Rename the file to
nvmand place it somewhere in your$PATH - Add
path/to/nvm-home/shimsto your PATH (TODO: document this) - Enjoy?
Cargo
cargo install nvm-rust
Note for Windows
It does not allow creating the symlinks this program uses without either Admin access or Developer Mode.
Either run the program as Administrator or enable Developer Mode
Feature Comparison
| nvm-rust | nvm-windows | nvm | |
|---|---|---|---|
| Platforms | Win, Mac, Linux | Windows | POSIX |
| Range matching | ✅ | ❌ | ✅ |
| Version files | ✅ | ❌ | ✅ |
| Default global packages | ❌ | ❌ | ✅ |
| Node <4 | ✅* | ✅ | ✅ |
| Disabling nvm temporarily | ❌ | ✅ | ✅ |
| Caching | ❌ | ❌ | ✅ |
| Aliases | ❌ | ❌ | ✅ |
**not supported, might work?
Range Matching
Allowing you to not have to write out the full versions when running a command.
For example:
nvm install 12will install the latest version matching12, instead of12.0.0.nvm install "12 <12.18"will install the latest12.17.xversion, instead of just giving you an error.nvm use 12switch use the newest installed12.x.xversion instead of12.0.0(and most likely giving you an error, who has that version installed?).
Version files (package.json#engines, .nvmrc, .tool-versions)
If a version is not specified for the use and install commands nvm-rust will look for and parse any files containing Node version specifications amd use that!
nvm-rust handles files containing ranges, unlike nvm.
e.g.
// package.json
{
...
"engines": {
"node": "^14.17"
}
...
}
# Installs 14.19.3 as of the time of writing
$ nvm install
The program will use the following file priority:
package.json#engines.nvmrc.node-version.tool-versionsfromasdf
Default global packages
Development
This project uses Task to execute various development commands.
e.g. to run a command via a debug build, run:
task run -- install 12
To build a release artifact, run:
task build:release
You can find all the commands in the Taskfile.
Publish new version
- Up version number in
Cargo.toml - Create tag on commit updating the version with said version (
vX.X.X) - Push both
- Wait for CI to create draft release for tag
- Edit draft release notes
- Publish