Nodejs Tips: 在virtualenv下使用nodejs

如题, python的辅助工具virtualenv, 让python的扩展库版本独立, 且不会污染主环境, 最近在用express.js写页面, 也希望能用到类似virtualenv的工具, 没发现一个特别合适的, 于是我的想法是直接装一个node到virtual的bin下面, 额外修改一下环境变量.

在ubuntu 12.04环境下一切正常. 这里虚拟环境路径以virtenv为例

1. 安装node到虚拟环境(virtenv).

1.1 直接用的是官网二进制包 (Gohan觉得用二进制包比较方面快速)

# 安装额外工具
$ sudo apt-get install curl

project$ virtualenv virtenv
project$ wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz
project$ tar zxvf node-v0.10.28-linux-x64.tar.gz
project$ cp -r node-v0.10.28-linux-x64/* virtenv/
project$ rm node-v0.10.28-linux-x64.tar.gz

1.2 直接用源码编译安装

# 编译需要额外安装编译工具
$ sudo apt-get install curl build-essential openssl libssl-dev pkg-config

# 先激活现有的virtualenv环境
project$ . virtualenv virtenv
(virtenv)project$ curl http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz | tar xvz
(virtenv)project$ cd node-v0.10.28
(virtenv)node-v0.10.28$ ./configure --prefix=$VIRTUAL_ENV
(virtenv)node-v0.10.28$ make install
(virtenv)node-v0.10.28$ deactivate
(virtenv)node-v0.10.28$ cd ..
(virtenv)project$ deactivate
# 删掉所有node源码
project$ rm -rf node-v0.10.28/

2. 修改virtualenv的active脚本

为了让virtualenv下的node也能用全局的NODE_PATH环境.

编辑虚拟路径下的active脚本(virtenv/bin/active)

找到修改virtualenv中PATH的地方

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

# 在这里照猫画虎写一段NODE_PATH的重定义
# 如果存在$NODE_PATH, 则追加, 否则直接定义一个NODE_PATH
_OLD_NODE_PATH="$NODE_PATH"
if [ -n "$_OLD_NODE_PATH" ] ; then
    NODE_PATH="$VIRTUAL_ENV/lib/node_modules"
else
    NODE_PATH="$VIRTUAL_ENV/lib/node_modules:$NODE_PATH"
fi
export NODE_PATH

在deactive()函数中, 找到还原virtualevn中PATH得地方

deactivate () {
    # ...
    if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then
        PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
        export PYTHONHOME
        unset _OLD_VIRTUAL_PYTHONHOME
    fi
    # 在这里照猫画虎NODE_PATH的还原
    # 如果之前的_OLD_NODE_PATH没有定义, 则不去处理, 否则就还原. 这里我查到了-v的用法, 不确定非bash能不能支持.
    if [ -v _OLD_NODE_PATH ] ; then
        if [ -n "$_OLD_NODE_PATH" ]; then
            NODE_PATH="$_OLD_NODE_PATH"
            export NODE_PATH
            unset _OLD_NODE_PATH
        else
            unset NODE_PATH
            unset _OLD_NODE_PATH
        fi
    fi
    # ...
}

3. 完事儿

好了, 现在在virtualenv下头可以放心用npm install -g了不用担心环境被污染了.

This entry was posted in Useful Tips and tagged , . Bookmark the permalink.

Leave a Reply