Change between installed Node versions in your current shell with a simple
chnode VERSION
. Leaves the system version untouched. Works out of the box with
Mac's Homebrew.
- Change only the current shell without affecting the rest of the system
- Works out of the box with paths used by Mac's Homebrew
- Extendable by adding more Node paths to the
NODES
variable - Leaves installing Node versions to your package manager thereby adhering to the do one thing and do it well principle
- Works in Bash and Zsh, and possibly other POSIX compatible shells
- Does not pollute your shell namespaces with internal functions
- Lightweight
- Written in the shell language (KISS)
- Able to automaticallly-switch
node
s (sourcechnode-auto
instead ofchnode
) - Able to run under a node without hooking the shell (via
chnode-exec
) - Doesn't hook
cd
Side note: I'm terribly ashamed of not yet having tests!
There are a few existing tools for switching Node versions, so how does Chnode differ?
- It does not manage installations.
Existing package managers (GNU/Linux distros', Homebrew etc.) do a better job of installing or compiling securely than such scripts. - It's really lightweight — just a single shell function.
No build tools or compilers necessary. - It changes the node version only for the current shell session.
Tools like n or nvm affect the entire system or all open shells. That's why if you need to test a single app in multiple Node versions, Chnode comes very handy.
If you do insist on compiling and installing Nodes via 3rd-party tools, check these out:
- nvm
- n
- nodist
- nodenv
- node-build (node-env plugin)
Install Chnode globally with:
npm install --global giorni/chnode
Then source it in your shell:
. "$(npm bin --global)/chnode"
For convenience you might want to put the output of the following in your
.zshrc
or .bashrc
.
It'll be faster than running the line above with npm bin
which will slow down
your shell loading.
echo ". \"$(npm bin --global)/chnode\""
If .nvmrc
or .node-version
are available, use the following to switch nodes automatically:
. "$(npm bin --global)/chnode-auto"
"$(npm bin --global)/chnode-exec" 6.9 -- node ...
Change between installed Node versions with:
chnode 0.12.2
To change to the latest installed v0.11.x (e.g. Node 0.11.15):
chnode 0.11
To change to the latest v0.x:
chnode 0
To go back to the system version:
chnode system
Option | Description |
---|---|
-h, -?, --help |
Display this help. |
-l, --list |
List all available Node versions. |
-r, --refresh |
Refresh and find all available Node versions. |
-v, --verbose |
Be verbose when changing versions. |
-V, --version |
Display version information. |
On the Mac, Chnode will find installed Nodes in /usr/local/Cellar/node
.
If you've got installations somewhere else, set the NODES
variable to an
array of paths of individual versions:
NODES+=(~/.nodes/*)
For example, if you've got Node compiled from the source at
~/Development/node-master
, append that:
NODES+=(~/Development/node-master)
If you think Chnode should detect some of your paths automatically, please let me know by creating an issue. Thanks!
Chnode is released under a Lesser GNU Affero General Public License, which in summary means:
- You can use this program for no cost.
- You can use this program for both personal and commercial reasons.
- You do not have to share your own program's code which uses this program.
- You have to share modifications (e.g bug-fixes) you've made to this program.
For full legalese, see the LICENSE file.
If you find Chnode needs improving, please don't hesitate to type to me now at ricardo@giorni.co or create an issue online.
Andri Möll typed this and the code. Barry Allard previously maintained.