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.
# 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
You can try this library:
- either directly in your browser.
- or by executing the
examples
files in a terminal.
npm install -g nve
node >=8.12.0
must be globally installed. However the command run by nve
can
use any Node version.
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
.
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 exitcode
orsignal
- use the
childProcess
if you want to to access its output. Please noteoptions.stdio
defaults toinherit
.
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...]
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
.
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:
promise
: resolves withcode
andsignal
childProcess
The following benchmarks compare the average time to run
nve
, nvm run
and
npx node
:
nve: 68ms
nvm run: 852ms
npx node: 1385ms
get-node
: Download Node.jsnormalize-node-version
: Normalize and validate Node.js versionsall-node-versions
: List all available Node.js versionsfetch-node-website
: Fetch releases on nodejs.org
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.
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 💻 🎨 🤔 📖 |
Scott Warren 💬 |
Charlike Mike Reagent 💬 🤔 |
Hongarc 🤔 |