Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/beeequeue/nvm-rust

A cross-platform node version manager that doesn't suck
https://github.com/beeequeue/nvm-rust

javascript linux macos node nvm rust version-manager windows

Last synced: 13 days ago
JSON representation

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

Awesome Lists containing this project

README

        

# 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. Add `path/to/nvm-home/shims` to your PATH _(TODO: document this)_
4. 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