Awesome
nvm(-rust)
Cross platform nvm that doesn't suck™
Installation
Binaries
- Download binary for your OS from the Releases
- Rename the file to
nvm
and place it somewhere in your$PATH
- Add
path/to/nvm-home/shims
to 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 12
will install the latest version matching12
, instead of12.0.0
.nvm install "12 <12.18"
will install the latest12.17.x
version, instead of just giving you an error.nvm use 12
switch use the newest installed12.x.x
version 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-versions
fromasdf
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