Skip to content

Latest commit

 

History

History
230 lines (166 loc) · 8.11 KB

README.md

File metadata and controls

230 lines (166 loc) · 8.11 KB

Codecov Travis Gitter Twitter Medium

Run any Node.js version.

This executes a file, command or REPL using a specific Node.js version.

Unlike nvm run it:

  • can be run programmatically
  • is 10 times faster
  • does not need a separate installation step for each Node version
  • works on Windows
  • does not require Bash
  • is installed as a Node module (as opposed to a Bash installation script downloaded with curl)

nve executes a single file or command. It does not change the node nor npm global binaries. To run a specific Node.js version for an entire project or shell session, please use nvm, nvm-windows, n or nvs instead.

Examples

# Same as `node` but with Node 12
$ nve 12
Welcome to Node.js v12.8.0.
Type ".help" for more information.
> .exit

# Same as `node file.js` but with Node 8
$ nve 8 file.js

# Any Node CLI flag can be used
$ nve 8 --print 'process.version'
v8.16.0

# Run a specific version
$ nve 8.10.0 --version
v8.10.0

# Run the latest Node version
$ nve '*' --version
v12.8.0

# Use a version range
$ nve '<8' --version
v7.10.1

Or from Node.js:

const { promise, childProcess } = await nve('8', ['--version'])
await promise

Demo

You can try this library:

Install

npm install -g nve

node >=8.12.0 must be globally installed. However the command run by nve can use any Node version.

Usage (CLI)

nve VERSION [ARGS...]

This is exactly the same as:

node [ARGS...]

But using a specific Node version. Any Node CLI flag can be passed.

VERSION can be any version range such as 12, 12.6.0 or <12.

Usage (Node.js)

const options = {}
const { promise, childProcess } = await nve('8', ['--version'], options)
const { code, signal } = await promise

You can either:

  • use the promise if you just want to wait for the child process to complete and retrieve its exit code or signal
  • use the childProcess if you want to to access its output. Please note options.stdio defaults to inherit.

Initial download

The first time nve is run with a new VERSION, the Node binary is downloaded from https://nodejs.org/dist under the hood. This initially takes few seconds. However subsequent runs are almost instantaneous.

A spinner will show the download progress. This can be disabled using the environment variable NVE_PROGRESS=0.

You can specify a mirror website using the environment variable NODE_MIRROR.

NODE_MIRROR="https://npm.taobao.org/mirrors/node" nve VERSION [ARGS...]

Native modules

If your code is using native modules, nve will work providing:

  • they are built with N-API
  • the target Node.js version is >=8.12.0 (since N-API was not available or stable before that)

Otherwise the following error message will be shown: Error: The module was compiled against a different Node.js version.

API (Node.js)

nve(versionRange, args?, options?)

versionRange: string
args: string[]
options: object
Return value: Promise<object>

args and options are the same as in child_process.spawn(command, args, options).

The return value is a promise resolving to an object with the following properties:

Benchmarks

The following benchmarks compare the average time to run nve, nvm run and npx node:

nve:        68ms
nvm run:   852ms
npx node: 1385ms

See also

Support

If you found a bug or would like a new feature, don't hesitate to submit an issue on GitHub.

For other questions, feel free to chat with us on Gitter.

Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.

Contributing

This project was made with ❤️. The simplest way to give back is by starring and sharing it online.

If the documentation is unclear or has a typo, please click on the page's Edit button (pencil icon) and suggest a correction.

If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!

Thanks go to our wonderful contributors:

ehmicky
ehmicky

💻 🎨 🤔 📖
Scott Warren
Scott Warren

💬
Charlike Mike Reagent
Charlike Mike Reagent

💬 🤔
Hongarc
Hongarc

🤔