Is there a virtual environment for node.js?
node.jsVirtualenvLanguage Comparisonsnode.js Problem Overview
I've searched the wiki modules page, but I can't find anything similar to virtualenv (python) or rvm.
Anyone here separates node.js in their own env? I really don't like to install npm system-wide.
node.js Solutions
Solution 1 - node.js
nodeenv - virtual environment for node.js ( Analog virtualenv )
Solution 2 - node.js
If having system wide npm packages is your main issue, then maybe consider using the very cool 'bundle' command with npm. This is closer to freezing gems or using bundler in rails, rather than rvm.
It's super easy. Just create a package.json file:
{ "name": "yourapp", "version": "0.0.1", "dependencies": {"jade": "0.4.1"}}
and then run:
npm bundle vendor
or if your npm version is >= 1.0 run:
npm install
to freeze into the vendor directory. and then use:
require.paths.unshift('./vendor');
Solution 3 - node.js
There are also some Node version management systems that can help.
Check out Nave https://github.com/isaacs/nave
NVM could also be used https://github.com/creationix/nvm
There is also one called n https://github.com/visionmedia/n
Solution 4 - node.js
bxjx's answer is conceptually accurate. However, please note that the bundle command no longer takes a directory. It always drops packages into the node_modules
folder, so that npm knows where to find them later (and can avoid double-installing dependencies).
Any solution will probably involve installing npm and nave "system-wide" (that is, in your PATH
, which could be in ~
somewhere), but then only installing your specific dependencies in the virtual environment.
I responded more thoroughly on the github issue.
tl;dr: The use case is valid and helpful, and while it's mostly there, it's not as well served as it could be. We should make sure to think it through and do it right.
Solution 5 - node.js
You don't always need to install dependencies globally. Usually it's recommended because then you can use the commands an npm package provides. But if you install it locally (in the node_modules
) directory, you can also use these commands, they only wind up in the node_modules/.bin/
directory, so you'll have to type node_modules/.bin/<command>
, which is annoying, but you can of course add this path to your PATH
environment variable:
export PATH=node_modules/.bin:$PATH
Then you can just type <command>
and it works!
There's actually an npm command that returns an absolute path to the .bin
directory:
$ npm bin
/path/to/node_modules/.bin
This command also works when you're in a subdirectory of the project, it will return the first node_modules/.bin
directory it finds in it's parent directories.
You can add this alias in your .bashrc
to automatically add the .bin/
directory to your PATH
:
alias nodebin='export PATH=$(npm bin):$PATH'
So when you're in a directory of a project that has a node_modules/
directory in the root, you can type nodebin
and then you can use all the commands that are in the .bin/
directory!
Edit:
Nowadays, you have a package that takes care of all of this for you: npx. Then you just prefix your command with npx
, like: npx <command>
. Check it out:
Solution 6 - node.js
looks there is a better way:
Installing Node.js and npm into a Python Virtualenv
now I can use node tools without mess the global bin environment
Solution 7 - node.js
If you like it simple, I truely recommend visionmedia's n, could not be easier!
Solution 8 - node.js
You can use miniconda, as explained here.
This allows you to combine python & nodejs in a single conda environment to do all your development work isolated from the global system:
conda create --name my_env python=3.9 nodejs
conda activate my_env
# optionally, also install yarn
conda install -c conda-forge yarn
##############################################
# check it works
# python related
pip --version
python --version
# nodejs related
yarn --version
npm --version
node --version
##############################################
# verify they're inside the conda environment
# python related
which pip
which python
# nodejs related
which yarn
which npm
which node