nvm-rust 0.4.3

A node version manager that doesn't suck
# nvm(-rust)

Cross platform nvm that doesn't suck™

## Installation

### Binaries

1. Download binary for your OS from the [Releases]https://github.com/BeeeQueue/nvm-rust/releases
2. Rename the file to `nvm` and place it somewhere in your `$PATH`
3. Enjoy?

### Cargo

```shell
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](https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development#active-developer-mode)_

_[Read more about it here](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10)_

## Feature Comparison

|                                                                        |  **nvm-rust**   | [nvm-windows]https://github.com/coreybutler/nvm-windows | [nvm]https://github.com/nvm-sh/nvm |
|-----------------------------------------------------------------------:|:---------------:|:---------------------------------------------------------:|:------------------------------------:|
|                                                              Platforms | Win, Mac, Linux |                          Windows                          |                POSIX                 |
|                                      [Range matching]#range-matching ||||
| [Version files]#version-files-packagejsonengines-nvmrc-tool-versions ||||
|                    [Default global packages]#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](https://github.com/nvm-sh/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`]https://asdf-vm.com/guide/getting-started.html#local

### Default global packages


## Development

This project uses [Task](https://taskfile.dev/installation) to execute various development commands.

e.g. to run a command via a debug build, run:

```shell
task run -- install 12
```

To build a release artifact, run:

```shell
task build:release
```

You can find all the commands in the [Taskfile](./Taskfile.yml).

## 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