Node.js virtual environment (sandbox) builder
Clone or download
Pull request Compare This branch is 10 commits ahead, 394 commits behind ekalinin:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
AUTHORS
CHANGES
LICENSE
MANIFEST.in
Makefile
README
README.rst
README.ru.rst
nodeenv.py
setup.py

README.rst

Node.js virtual environment

nodeenv (node.js virtual environment) is a tool to create isolated node.js environments.

It creates an environment that has its own installation directories, that doesn't share libraries with other node.js virtual environments.

Also new environment can be integrated with environment which was built by virtualenv (python).

Install

Global installation

You can install nodeenv globally with easy_install:

$ sudo easy_install nodeenv

or pip:

$ sudo pip install nodeenv

Local installation

If you're using virtualenv then you can install nodeenv via pip/easy_install inside any virtual environment built with virtualenv:

$ virtualenv env
$ . env/bin/activate
(env) $ pip install nodeenv
(env) $ nodeenv --version
0.6.5

If you want to work with the latest version of the nodeenv you can install it from the github repository:

$ git clone https://github.com/ekalinin/nodeenv.git
$ ./nodeenv/nodeenv.py --help

Dependencies - *nix

For nodeenv

  • make
  • curl
  • egrep
  • sort
  • tail
  • tar

For node.js

  • Python 2.6 or 2.7
  • libssl-dev

Dependencies - Windows

  • Python 2.7 or Python 3.2+
  • virtualenv

Usage

Basic

Create new environment:

$ nodeenv env

Activate new environment:

$ . env/bin/activate

Check versions of main packages:

(env) $ node -v
v0.4.6

(env) $ npm -v
0.3.18

Deactivate environment:

(env) $ deactivate_node

Advanced

Get available node.js versions:

$ nodeenv --list
0.0.1   0.0.2   0.0.3   0.0.4   0.0.5   0.0.6   0.1.0
0.1.2   0.1.3   0.1.4   0.1.5   0.1.6   0.1.7   0.1.8
0.1.10  0.1.11  0.1.12  0.1.13  0.1.14  0.1.15  0.1.16
0.1.18  0.1.19  0.1.20  0.1.21  0.1.22  0.1.23  0.1.24
0.1.26  0.1.27  0.1.28  0.1.29  0.1.30  0.1.31  0.1.32
0.1.90  0.1.91  0.1.92  0.1.93  0.1.94  0.1.95  0.1.96
0.1.98  0.1.99  0.1.100 0.1.101 0.1.102 0.1.103 0.1.104
0.2.1   0.2.2   0.2.3   0.2.4   0.2.5   0.2.6   0.3.0
0.3.2   0.3.3   0.3.4   0.3.5   0.3.6   0.3.7   0.3.8
0.4.1   0.4.2   0.4.3   0.4.4   0.4.5   0.4.6

Install node.js "0.4.3" without ssl support with 4 parallel commands for compilation and npm.js "0.3.17":

$ nodeenv --without-ssl --node=0.4.3 --npm=0.3.17 --jobs=4 env-4.3

Create a new environment with the system-wide node.js:

$ nodeenv --node=system

Saving into the file versions of all installed packages:

$ . env-4.3/bin/activate
(env-4.3)$ npm install -g express
(env-4.3)$ npm install -g jade
(env-4.3)$ freeze ../prod-requirements.txt

Create environment copy from requirement file:

$ nodeenv --requirement=../prod-requirements.txt --jobs=4 env-copy

Requirements files are plain text files that contain a list of packages to be installed. These text files allow you to create repeatable installations. Requirements file example:

$ cat ../prod-requirements.txt
connect@1.3.0
express@2.2.2
jade@0.10.4
mime@1.2.1
npm@0.3.17
qs@0.0.7

If you're already have python virtualenv tool, and want to use nodeenv and virtualenv in conjunction, then you should create (or activate) python virtual environment:

# in case of using virtualenv_wrapper
$ mkvirtualenv my_env

# in case of using virtualenv
$ . my_env/bin/activate

and add node virtual environment to this existing new_venv:

$ nodeenv -p

That's all. Now, all your node.js modules will be installed into your virtual environment:

$ workon my_env
$ npm install -g coffee-script
$ which coffee
/home/monty/virtualenvs/my_env/bin/coffee

Windows

On Windows, the functionality is a bit limited. It can only be used in existing Python virtualenv environments. This is mainly because Powershell requires signed scripts to work best and I don't have a code-signing certificate. By piggybacking on a Python virtualenv environment, we can leverage those signed Powershell scripts.

Get available node.js versions:

$ nodeenv --list
0.0.1   0.0.2   0.0.3   0.0.4   0.0.5   0.0.6   0.1.0
0.1.2   0.1.3   0.1.4   0.1.5   0.1.6   0.1.7   0.1.8
0.1.10  0.1.11  0.1.12  0.1.13  0.1.14  0.1.15  0.1.16
0.1.18  0.1.19  0.1.20  0.1.21  0.1.22  0.1.23  0.1.24
0.1.26  0.1.27  0.1.28  0.1.29  0.1.30  0.1.31  0.1.32
0.1.90  0.1.91  0.1.92  0.1.93  0.1.94  0.1.95  0.1.96
0.1.98  0.1.99  0.1.100 0.1.101 0.1.102 0.1.103 0.1.104
0.2.1   0.2.2   0.2.3   0.2.4   0.2.5   0.2.6   0.3.0
0.3.2   0.3.3   0.3.4   0.3.5   0.3.6   0.3.7   0.3.8
0.4.1   0.4.2   0.4.3   0.4.4   0.4.5   0.4.6

Create a new environment:

$ nodeenv -p .

Use the -n option if you wish to specify a specific node.js version.

Environments can then be activated and deactivated as per Python virtualenvs.

Alternatives

There are several alternatives that create isolated environments:

  • nave - Virtual Environments for Node. Nave stores all environments in one directory ~/.nave. Thus it is not possible to create different environments for one version of node.js. Can not pass additional arguments into configure (for example --without-ssl)
  • nvm - Node Version Manager. It is necessarily to do nvm sync for caching available node.js version. Can not pass additional arguments into configure (for example --without-ssl)
  • virtualenv - Virtual Python Environment builder. For python only.