在使用Node.js开发之前,我们首先要配置好开发环境。本章的主要内容有:

    □如何在Linux、Windows、Mac OS X上通过包或包管理器安装Node.js;
    □如何在POSIX和Windows下通过编译源代码安装Node.js;
    □安装npm(Node.js包管理器);
    □使用多版本管理器让多个Node.js的实例共存。

    2.1 安装前的准备

    Node.js的生态系统建立在遵循POSIX标准的操作系统上,如GNU/Linux、Mac OS X、Solaris等。Node.js起初不支持Windows,只能运行在cygwin上,而0.6版本以后就支持Windows了,本节后面会详述。

    从2009年诞生至今,Node.js一直处在快速发展的时期,因此很多方法、技巧都会迅速被新的技术取代,本书内容也不例外。就在不久前,大家还都推荐通过编译源代码安装Node.js,而现在已经有了成熟的安装包发行系统。我们推荐你尽量通过Node.js官方或操作系统发行版提供的途径进行安装,除非你想获得最新的版本,否则就不要费力编译了。

    Windows上的Node.js

    Node.js从0.6版本开始可以运行在原生的Windows上了(不是cygwin或者其他虚拟环境)。这很大程度上应该归功于微软的合作,因为微软的云计算平台Windows Azure宣布了对Node.js完全支持。这对微软来说简直是破天荒的举动,因为一贯具有“开源死敌”之称的微软,竟然支持具有深厚开源血统的Node.js,不得不令人瞠目结舌。

    尽管如此,Node.js与Windows的兼容性仍然不如POSIX操作系统,这一点在npm提供的第三方模块中体现得尤为突出。这主要是因为许多第三方的模块需要编译原生的C/C++代码,其中编译框架和系统调用很多都是以Linux为范本的,与Windows不兼容。笔者不建议在Windows上进行Node.js开发或部署,当然出于学习目的,这些影响也是无关紧要的。相信随着Node.js的发展(以及微软与开源社区关系的进一步改善),Node.js与Windows的兼容性会越来越好。

    接下来的小节我们将详细介绍Node.js的安装方法。

    2.2 快速安装

    2.2.1 Microsoft Windows系统上安装Node.js

    在Windows上安装Node.js十分方便,你只需要访问http://nodejs.org,点击Download链接,然后选择Windows Installer,下载安装包。下载完成后打开安装包(如图2-1所示),点击Next即可自动完成安装。

    安装和配置Node.js - 图1

    图2-1 在Windows上安装Node.js

    安装程序不会询问你安装路径,Node.js会被自动安装到C:\Program Files\nodejs或C:\Program Files (x86)\nodejs(64位系统)目录下,并且会在系统的PATH环境变量中增加该目录,因此我们可以在Windows的命令提示符中直接运行node。

    为了测试是否已经安装成功,我们在运行中输入cmd,打开命令提示符,然后输入node,将会进入Node.js的交互模式,如图2-2所示。

    安装和配置Node.js - 图2

    图2-2 Windows命令提示符下的Node.js

    通过这种方式安装的Node.js还自动附带了npm图2-2,我们可以在命令提示符中直接输入npm来使用它。

    2.2.2 Linux发行版上安装Node.js

    Node.js目前还处在快速变化的时期,它的发行速度要远远大于Linux发行版维护的周期,因此各个Linux发行版官方的软件包管理器中提供的Node.js往往都比较过时。尽管如此,我们还是可以通过发行版的包管理器获得一个较为稳定的版本,根据不同的发行版,通过以下命令来获取Node.js,参见表2-1。

    表2-1 在Linux发行版中获取Node.js

    安装和配置Node.js - 图3

    如果你需要用软件包管理器来获得较新版本的Node.js,就要根据不同的发行版选择第三方的软件源,具体请参阅:https://github.com/joyent/node/wiki/Installing-Node.js-via-packagemanager。

    2.2.3 Mac OS X上安装Node.js

    Node.js官方专门提供了Mac OS X的安装包,你可以在http://nodejs.org找到Download链接,然后选择Macintosh Installer,下载安装包。下载完成后运行安装包(如图2-3所示),根据提示完成安装。

    安装和配置Node.js - 图4

    图2-3 在Mac OS X上安装Node.js

    Node.js和npm会被安装到/usr/local/bin目录下,安装过程中需要系统管理员权限。安装成功后你可以在终端机中运行node命令进入了Node.js的交互模式。如果出现-bash: node: command not found,说明没有正确安装,需要重新运行安装包或者采取其他形式安装Node.js。

    2.3 编译源代码

    Node.js从0.6版本开始已经实现了源代码级别的跨平台,因此我们可以使用不同的编译命令将同一份源代码的基础上编译为不同平台下的原生可执行代码。

    在编译之前,要先获取源码包。我们建议访问http://nodejs.org,点击Download链接,然后选择Source Code,下载正式发布的源码包。如果你需要开发中的版本,可以通过https://github.com/joyent/node/zipball/master获得,或者在命令行下输入git clone git://github.com/joyent/node.git从git获得最新的分支。

    2.3.1 在POSIX系统中编译

    在POSIX系统中编译Node.js需要三个工具:

    □C++编译器gcc或clang/LLVM;
    □Python版本2.5以上,不支持Python 3;
    □libssl-dev提供SSL/TLS加密支持。

    如果你使用Linux,那么你需要使用g++来编译Node.js。在Debian/Ubuntu中,你可以通过apt-get install g++命令安装g++。在Fedora/Redhat/CentOS中,你可以使用yum install gcc-c++安装。

    如果使用的是Mac OS X,那么需要安装Xcode。默认情况下,系统安装盘中会有Xcode,可以从光盘中安装,或者访问https://developer.apple.com/xcode/下载最新的版本。

    Mac OS X和几乎所有的Linux发行版都内置了Python,你可以在终端机输入命令python —version检查Python的版本,可能会显示Python 2.7.2或其他版本。如果你发现版本号小于2.5或者直接出现了command not found,那么你需要通过软件包管理器获得一个新版本的Python,或者到http://python.org/下载一个。

    libssl-dev是调用OpenSSL编译所需的头文件,用于提供SSL/TLS加密支持。Mac OS X的Xcode内置了libssl-dev。在Debian/Ubuntu中,你可以通过apt-get install libssl-dev命令安装。在Fedora/Redhat/CentOS中,你可以通过yum install openssl-devel命令安装。同样,你也可以访问http://openssl.org/下载一个。

    接下来,进入Node.js源代码所在目录,运行:

    安装和配置Node.js - 图5

    之后大约等待20分钟,Node.js就安装完成了,而且附带安装了npm。

    如果你使用Mac OS X,还可以尝试使用homebrew编译安装Node.js。首先在http://mxcl.github.com/homebrew/获取homebrew,然后通过以下命令即可自动解析编译依赖并安装Node.js:

    安装和配置Node.js - 图6

    2.3.2 在Windows系统中编译

    Node.js在Windows下只能通过Microsoft Visual Studio编译,因此你需要首先安装Visual Studio或者免费的Visual Studio Express。你还需要安装Python 2(2.5以上的版本,但要小于3.0),可以在http://python.org/取得。安装完Python以后请确保在PATH环境变量中添加python.exe所在的目录,如果没有则需要手动在“系统属性”中添加。

    一切准备好以后,打开命令提示符,进入Node.js源代码所在的目录进行编译:

    安装和配置Node.js - 图7

    大约等待20分钟,编译完成。在Release子目录下面会有一个node.exe文件,这就是我们编译的唯一目标。也许有些令人惊讶,Node.js编译后只有一个node.exe文件,这说明Node.js的核心非常小巧精悍。直接运行node.exe即可进入Node.js的交互模式,在系统PATH环境变量中添加node.exe文件所在的目录,这样就可以在命令行中运行node命令了,剩下的工作就是手动安装npm了。

    2.4 安装Node包管理器

    Node包管理器(npm)是一个由Node.js官方提供的第三方包管理工具,就像PHP的Pear、Python的PyPI一样。npm是一个完全由JavaScript实现的命令行工具,通过Node.js执行,因此严格来讲它不属于Node.js的一部分。在最初的版本中,我们需要在安装完Node.js以后手动安装npm。但从Node.js 0.6开始,npm已包含在发行包中了,我们在Windows、Mac上安装包和源代码包时会自动同时安装npm。

    如果你是在Windows下手动编译的,或是在POSIX系统中编译时指定了—without-npm参数,那就需要手动安装npm了。http://npmjs.org/提供了npm几种不同的安装方法,通常你只需要执行以下命令:

    安装和配置Node.js - 图8

    如果安装过程中出现了权限问题,那么需要在root权限下执行上面的语句,或者使用sudo。

    安装和配置Node.js - 图9

    其他安装方法,譬如从git中获取npm的最新分支,可以参考http://npmjs.org/doc/README.html上的说明。

    2.5 安装多版本管理器

    迄今为止Node.js更新速度还很快,有时候新版本还会将旧版本的一些API废除,以至于写好的代码不能向下兼容。有时候你可能想要尝试一下新版本有趣的特性,但又想要保持一个相对稳定的环境。基于这种需求,Node.js的社区开发了多版本管理器,用于在一台机器上维护多个版本的Node.js实例,方便按需切换。Node多版本管理器(Node Version Manager,nvm)是一个通用的叫法,它目前有许多不同的实现。通常我们说的nvm是指https://github.com/creationix/nvm或者https://github.com/visionmedia/n。笔者根据个人偏好推荐使用visionmedia/n,此小节就以它为例子介绍Node多版本管理器的用法。

    n是一个十分简洁的Node多版本管理器,就连它的名字也不例外。它的名字就是n,没错,就一个字母。【1】

    如果你已经安装好了Node.js和npm环境,就可以直接使用npm install -g n命令来安装n。当然你可能会问:如果我想完全通过n来管理Node.js,那么没安装之前哪来的npm呢?事实上,n并不需要Node.js驱动,它只是bash脚本,使用npm安装只是采取一种简便的方式而已。我们可以在https://github.com/visionmedia/n下载它的代码,然后使用make install命令安装。

    安装和配置Node.js - 图10

    n不支持Windows。

    安装完n以后,在终端中运行n —help即可看到它的使用说明:

    安装和配置Node.js - 图11

    运行n版本号可以安装任意已发布版本的Node.js,n会从http://nodejs.org下载源代码包,然后自动编译安装,例如:

    安装和配置Node.js - 图12

    安装和配置Node.js - 图13

    通过n获取的Node.js实例都会安装在/usr/local/n/versions/目录中。

    之后再运行n即可列出已经安装的所有版本的Node.js,其中“*”后的版本号为默认的Node.js版本,即可以直接使用node命令行调用的版本:

    安装和配置Node.js - 图14

    和安装新版本一样,运行n版本号也可以在已安装的Node.js实例中切换环境,再运行node即为n指定的当前版本,例如:

    安装和配置Node.js - 图15

    如果你不想切换默认环境,可以使用n use版本号script.js直接指定Node.js的运行实例,例如:

    安装和配置Node.js - 图16

    安装和配置Node.js - 图17

    n无法管理通过其他方式安装的Node.js版本实例(如官方提供的安装包、发行版软件源、手动编译),你必须通过n安装Node.js才能管理多版本的Node.js。

    关于n的更多细节,请访问它的项目主页https://github.com/visionmedia/n获取信息。

    2.6 参考资料

    □“Building and Installing Node.js”: https://github.com/joyent/node/wiki/Installation。
    □“Node package manager”: http://npmjs.org/doc/README.html。
    □“Node version management”: https://github.com/visionmedia/n。
    □“深入浅出Node.js(二): Node.js & NPM的安装与配置”: http://www.infoq.com/cn/articles/nodejs-npm-install-config。
    □“Node.js Now Runs Natively on Windows”: http://www.infoq.com/news/2011/11/NodejsWindows。
    □《Node Web开发》,David Herron著,人民邮电出版社出版。
    □“如何在Mac OS X Lion上设定node.js的开发环境”: http://dreamerslab.com/blog/tw/how-to-setup-a-node-js-development-environment-on-mac-osx-lion/。

    注 释

    【1】事实上,n它曾经叫做nvm,后来改名为n。