Skip to content

ukoloff/nvms

Repository files navigation

nvm$

Build status build status

Node Version Manager for M$ Windows.

Inspired by nvmw and nvm-windows (and of course nvm itself), but totally rewritten using Microsoft Scripting Host.

Advantages

  • Written in JavaScript itself (well, JScript)
  • Contains both:
    • Command line utility nvm$
    • Full featured GUI for all operations (uses MSIE)
  • Adds single entry to PATH environment variable
  • Creates additional utilities:
    • node.exe for iojs distributions (along with iojs.exe)
    • Console-less Node.js binary (nodew.exe)
    • Restricted version of npx script
    • Can optionally install OpenSSL binary
  • Detects availability of new versions of Node.js and itself
  • One (or more) Node.js versions can be incorporated into installation package

Installation

If you have git installed:

If you have got no git or don't like to use command prompt:

  • Download upgrade.bat (mirror)
  • Save it to any folder
  • Run it
  • It will download full distro, unpack and start installation

In case your browser won't agree to download batch files or run them afterwards, you can do the job of upgrade.bat yourself:

  • Download nvm$.zip (mirror)
  • Start downloaded nvms$.zip (in Explorer)
  • Click setup.bat
  • Windows will prompt to extract all files
  • Agree
  • Click setup.bat again

Finally, you can download nvm$ package with Node.js incorporated (x64 or x86) and install everything requiring no Internet access.

After any installation you should close command prompt (if any) and open new one to use nvm$.

Update

For new version of nvm$ to install just repeat installation steps above.

This can be done with nvm$ upgrade self command.

nvm$ will periodically check its repo to see whether new version exists and prompt to update in that case.

To disable that check, find file %UserProfile%\.nvm$\that\.v and insert into beginning some character like # or ; or even -.

How it works

Fiddling environment variables may be tricky especially on Windows. So, nvm$ adds itself to PATH during setup and then simply switch folder referred to by PATH.

Therefore all the processes of current user immediately see this change. There is the only Node.js version active at any moment of time (unlike nvm).

nvm$ is always installed to a user, it cannot be installed system-wide.

If Node.js is also normally installed (for all users), nvm$ works, but is in fact unusable (system node.exe is always preferred), so don't install them both.

Technically, for switching Node.js version NTFS junction point is used. As there is no standard ActiveX control for junction point manipulations, command line utility linkd from Windows Server 2003 Resource Kit Tools is used.

Specifying Node.js version

Due to using JavaScript for processing, it appeared possible (and even easy) to do exhaustive command line parsing.

For most commands, where Node.js version should be specified, it is possible to select (in any set and order):

  • Distribution (node or iojs)
  • Platform (x86 or x64)
  • Version (7 or 4.9 or may be 0.10.27)
  • LTS flag (lts only)

Any parameter can be abbreviated, eg nvm$ i i is equivalent to nvm$ install iojs (that is nvm$ i 3) and nvm$ o x8 means nvm$ openssl x86.

Commands nvm$ install and nvm$ use select latest (maximal) of all possible versions, while nvm$ remove deletes oldest (minimal) one.

Therefore to install freshest Node.js with default platform just type nvm$ i, while nvm$ i x6 installs latest 64-bit version.

Commands

ls

List installed Node.js versions. Filters apply, as mentioned earlier, so nvm$ l x8 will list only x86 installations.

ls remote

List Node.js (and io.js) versions available (fetches their lists from respective sites). nvm$ l r 4 will list all 4.*.* versions available.

install

Install latest of specified Node.js versions. One can select platform (x86 or x64) or default will be used.

If specified version is installed, it will be used, so it is safe to run nvm$ i to ensure the latest version in installed.

To force reinstallation, add . to the end of command, eg nvm$ i . will reinstall latest version unconditionally.

use

Switch to latest of installed versions (filters apply). Eg nvm$ use means switch to latest of all, while nvm$ use i to latest of iojs.

Run nvm$ use none to temporarily make node.exe unavailable, you can switch back at any moment later.

which

Shows path to active version, or path to Junction point in case nvm$ use none was fired.

remove

Remove oldest of installed versions considering command line filter.

For security reasons, . must occur at the end of this command, or else it will refuse to proceed.

Eg, nvm$ d . (drop is alias for remove) will remove one (minimal) version. nvm$ d all i . will remove all iojs versions.

Actual removing of files can take much time, so it is performed in background. Don't logoff or turn off your computer a minute or two after this command finished.

Additional commands

openssl

Node.js versions 0.*.* contains openssl binary. nvm$ can download it and install into its PATH.

Like install command, platform can be specified. Other filters (version number for instance) are meaningless hence ignored.

abbrev

Helps to find comman abbreviation(s). Eg, run nvm$ a w to see all commands, starting with w and their alternatives.

Plain nvm$ a shows all abbreviations.

upgrade

Upgrades nvm$ itself and/or Node.js (current or LTS).

Self upgrade is nvm$ upgrade self.

For upgrading Node.js specify node or lts and (optionally) platform (x86 or x64). These arguments will be passed to regular install command.

www

Opens nvm$ repository in default browser.

bye

Fully uninstall nvm$ itself along with all Node.js versions.

Like remove command, requires . to proceed and take some (more) time for actual files removal (may be 10 minutes or so).

Extra binaries

nvm$ creates two additional binaries and places them into it's PATH.

nodew

This is regular node.exe that has no console window (black flash), analogous to perlw, rubyw, pythonw etc.

npx

This is a poor man's variation of great npx console utility. It is created only for old distros missing regular npx.

This limited edition can only run locally installed scripts. It never installs anything neither permanently nor temporarily.

Caveats

Complex batch files are considered a threat nowadays by most antivirus software. Surprisingly, the most suspicious activity is unpacking MSI-file that contains official distro of Node.js.

So, temporarily disabling antivirus software just before nvm$ install is recommended.

In case you forgot it, causing installation to fail, immediately disable antivirus and repeat installation. nvm$ will skip downloading and proceed to unpacking again.

Building SFX package

To build SFX package (containing nvm$ itself and some Node.js versions), full repository is needed. It works only on Windows so far.

Command to build package is node webpack\dist [filter], where filter is regular filtering expression (just like ls command).

If no filter set, active installed version will be packed, unless nvm$ use none was issued. In latter case, latest of installed will go into SFX.

When filter is specified, all versions, matching it will be packed into SFX, allowing many (or none) Node.js versions available after installation. So, say node webpack\dist all to add all versions installed.

You can add some global npm packages to SFX package, by simple installing them (npm install -g) into Node.js to package.

Credits