Skip to content

A cross-platform node version manager that doesn't suck

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

beeequeue/nvm-rust

Repository files navigation

nvm(-rust)

Cross platform nvm that doesn't suck™

Installation

Binaries

  1. Download binary for your OS from the Releases
  2. Rename the file to nvm and place it somewhere in your $PATH
  3. Add path/to/nvm-home/shims to your PATH (TODO: document this)
  4. 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

Read more about it here

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 matching 12, instead of 12.0.0.
  • nvm install "12 <12.18" will install the latest 12.17.x version, instead of just giving you an error.
  • nvm use 12 switch use the newest installed 12.x.x version instead of 12.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:

  1. package.json#engines
  2. .nvmrc
  3. .node-version
  4. .tool-versions from asdf

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

  1. Up version number in Cargo.toml
  2. Create tag on commit updating the version with said version (vX.X.X)
  3. Push both
  4. Wait for CI to create draft release for tag
  5. Edit draft release notes
  6. Publish