BT

深入浅出Node.js(二):Node.js&NPM的安装与配置

作者 田永强 发布于 2011年11月30日 | 注意: 挥一挥衣袖,带走满满干货,关注活动大本营,时不时发福利呦!

专栏的第二篇文章《Node&NPM的安装与配置》介绍Node的安装部署、环境配置以及NPM的安装。

Node.js安装与配置

Node.js已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对0.4.x版本而言的,并非适合最新的0.6.x的版本情况了,对此,我们将在0.6.x的版本上介绍Node.js的安装和配置。(本文一律以0.6.1为例,0.6的其余版本,只需替换版本号即可。从http://nodejs.org/#download可以查看到最新的二进制版本和源代码)。

Windows平台下的Node.js安装

在过去,Node.js一直不支持在Windows平台下原生编译,需要借助Cygwin或MinGW来模拟POSIX系统,才能编译安装。幸运的是2011年6月微软开始与Joyent合作移植Node.js到Windows平台上(http://www.infoq.com/cn/news/2011/06/node-exe ),这次合作的成果最终呈现在0.6.x的稳定版的发布上。这次的版本发布使得Node.js在Windows平台上的性能大幅度提高,使用方面也更容易和轻巧,完全摆脱掉Cygwin或MinGW等实验室式的环境,并且在某些细节方面,表现出比Linux下更高的性能,细节参见http://www.infoq.com/news/2011/11/Nodejs-Windows

在Windows(Windows7)平台下,我将介绍二种安装Node.js的方法,即普通和文艺安装方法。

普通的安装方法

普通安装方法其实就是最简单的方法了,对于大多Windows用户而言,都是不太喜欢折腾的人,你可以从这里(http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi )直接下载到Node.js编译好的msi文件。然后双击即可在程序的引导下完成安装。

在命令行中直接运行:

node -v 

命令行将打印出:

v0.6.1 

该引导步骤会将node.exe文件安装到C:\Program Files (x86)\nodejs\目录下,并将该目录添加进PATH环境变量。

文艺的安装方法

Windows平台下的文艺安装方法主要提供给那些热爱折腾,喜欢编译的同学们。在编译源码之前需要注意的是你的Windows系统是否包含编译源码的工具。Node.js的源码主要由C++代码和JavaScript代码构成,但是却用gyp工具(http://code.google.com/p/gyp/ )来做源码的项目管理,该工具采用Python语言写成的。在Windows平台上,Node.js采用gyp来生成Visual Studio Solution文件,最终通过VC++的编译器将其编译为二进制文件。所以,你需要满足以下两个条件:

  1. Python(Node.js建议使用2.6或更高版本,不推荐3.0),可以从这里(http://python.org/)获取。
  2. VC++ 编译器,包含在Visual Studio 2010中(VC++ 2010 Express亦可),VS2010可以从这里(http://msdn.microsoft.com/en-us/vstudio/hh388567)找到。

下载Node.js的0.6.1版本的源码压缩包(http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz )并解压之。

通过命令行进入解压的源码目录,执行vcbuild.bat release命令,然后经历了漫长的等待后,编译完成后,在Release目录下可以找到编译好的node.exe文件。通过命令行执行node -v。

命令行返回结果为:

v0.6.1 

事实上,如果你的编译环境中存在WiX工具集(http://wix.sourceforge.net/ ),执行vcbuild.bat msi release命令,你将会在Relase目录下找到node.msi。

是的,我们回到了一开始的普通安装方法。所谓文艺就是多走一些路,多看一些风景罢了。

Unix/Linux平台下的Node.js安装

由于Node.js尚处于v0.x.x的版本的快速发展中,Unix/Linux平台的发行版都不会预置Node的二进制文件,通过源码进行编译安装是目前最好的选择。而且用Unix/Linux系统的同学们多数都是文艺程序员,本节只介绍如何通过源码进行编译和安装。

安装条件

如同在Windows平台下一样,Node.js依然是采用gyp工具管理生成项目的,不同的是通过make工具进行最终的编译。所以Unix/Linux平台下你需要以下几个必备条件,才能确保编译完成:

  1. Python。用于gyp,可以通过在shell下执行python命令,查看是否已安装python,并确认版本是否符合需求(2.6或更高版本,但不推荐3.0)。
  2. 源代码编译器,通常 Unix/Linux平台都自带了C++的编译器(GCC/G++)。如果没有,请通过当前发行版的软件包安装工具安装make,g++这些编译工具。
    1. Debian/Ubuntu下的工具是apt-get
    2. RedHat/centOS下通过yum命令
    3. Mac OS X下你可能需要安装xcode来获得编译器

       

  3. 其次,如果你计划在Node.js中启用网络加密,OpenSSL的加密库也是必须的。该加密库是libssl-dev,可以通过apt-get install libssl-dev等命令安装。

检查环境并安装

完成以上预备条件后,我们获取源码并进行环境检查吧:

wget http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz 
tar zxvf node-v0.6.1.tar.gz 
cd node-v0.6.1 
./configure 
上面几行命令是通过wget命令下载最新版本的代码,并解压之。./configure命令将会检查环境是否符合Nodejs的编译需要。 
Checking for program g++ or c++ : /usr/bin/g++ 
Checking for program cpp : /usr/bin/cpp 
Checking for program ar : /usr/bin/ar 
Checking for program ranlib : /usr/bin/ranlib 
Checking for g++ : ok 
Checking for program gcc or cc : /usr/bin/gcc 
Checking for program ar : /usr/bin/ar 
Checking for program ranlib : /usr/bin/ranlib 
Checking for gcc : ok 
Checking for library dl : yes 
Checking for openssl : yes 
Checking for library util : yes 
Checking for library rt : yes 
Checking for fdatasync(2) with c++ : yes 
'configure' finished successfully (7.350s) 

如果检查没有通过,请确认上面提到的三个条件是否满足。如果configure命令执行成功,就可以进行编译了:

make 
make install 

Nodejs通过make工具进行编译和安装(如果make install不成功,请使用sudo以确保拥有权限)。完成以上两步后,检查一下是否安装成功:

node -v 

检查是否返回:

v0.6.1 

至此,Nodejs已经编译并安装完成。如需卸载,可以执行make uninstall进行卸载。

小结

以上介绍了*nix和Windows平台下Nodejs的安装,之后可以如同Nodejs官方网站上介绍的那样,编写example.js文件。

var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(1337, "127.0.0.1"); 
console.log('Server running at http://127.0.0.1:1337/'); 

在命令行中执行它:

node example.js 

你就可以通过浏览器访问http://127.0.0.1:1337得到Hello World的响应。

安装NPM

NPM的全称是Node Package Manager,如果你熟悉ruby的gem,Python的PyPL、setuptools,PHP的pear,那么你就知道NPM的作用是什么了。没错,它就是Nodejs的包管理器。Nodejs自身提供了基本的模块。但是在这些基本模块上开发实际应用需要较多的工作。所幸的是笔者执笔此文的时候NPM上已经有了5112个Nodejs库或框架,这些库从各个方面可以帮助Nodejs的开发者完成较为复杂的应用。这些库的数量和活跃也从侧面反映出Nodejs社区的发展是十分神速和活跃的。下面我将介绍安装NPM和通过NPM安装Nodejs的第三方库,以及在大陆的网络环境下,如何更好的利用NPM。

Unix/Linux下安装NPM

就像NPM的官网(http://npmjs.org/)上介绍的那样,安装NPM仅仅是一行命令的事情:

curl http://npmjs.org/install.sh | sh 

这里详解一下这句命令的意思,curl http://npmjs.org/install.sh是通过curl命令获取这个安装shell脚本,按后通过管道符| 将获取的脚本交由sh命令来执行。这里如果没有权限会安装不成功,需要加上sudo来确保权限:

curl http://npmjs.org/install.sh | sudo sh 

安装成功后执行npm命令,会得到一下的提示:

Usage: npm <command> 
where <command> is one of: 
adduser, apihelp, author, bin, bugs, c, cache, completion, 
config, deprecate, docs, edit, explore, faq, find, get, 
help, help-search, home, i, info, init, install, la, link, 
list, ll, ln, ls, outdated, owner, pack, prefix, prune, 
publish, r, rb, rebuild, remove, restart, rm, root, 
run-script, s, se, search, set, show, star, start, stop, 
submodule, tag, test, un, uninstall, unlink, unpublish, 
unstar, up, update, version, view, whoami 

我们以underscore为例,来展示下通过npm安装第三方包的过程。

npm install underscore 

返回:

underscore@1.2.2 ./node_modules/underscore 

由于一些特殊的网络环境,直接通过npm install命令安装第三方库的时候,经常会出现卡死的状态。幸运的是国内CNode社区的@fire9同学利用空余时间搭建了一个镜像的NPM资源库,服务器架设在日本,可以绕过某些不必要的网络问题。你可以通过以下这条命令来安装第三方库:

npm --registry "http://npm.hacknodejs.com/" install underscore 

如果你想将它设为默认的资源库,运行下面这条命令即可:

npm config set registry "http://npm.hacknodejs.com/"

设置之后每次安装时就可以不用带上—registry参数。值得一提的是还有另一个镜像可用,该镜像地址是http://registry.npmjs.vitecho.com,如需使用,替换上面两行命令的地址即可。

Windows下安装NPM

由于Nodejs最初在Linux开发下的历史原因,导致NPM一开始也不支持Windows环境,但是随着Nodejs成功移植到到Windows平台,NPM在Windows下的需求亦是日渐增加。下面开始Windows下的NPM之旅吧。

安装GIT工具

由于github网站不支持直接下载打包了所有submodule的源码包,所以需要通过git工具来签出所有的源码。从http://code.google.com/p/msysgit/downloads/list,可以下载到msysgit这个Windows平台下的git客户端工具(最新版本文件为Git-1.7.7.1-preview20111027.exe)。在下载之后双击安装。

下载NPM源码

打开命令行工具(CMD),执行以下命令,可以通过msysgit签出NPM的所有源码和依赖代码并安装npm。

git clone --recursive git://github.com/isaacs/npm.git 
cd npm 
node cli.js install npm -gf 

在执行这段代码之前,请确保node.exe是跟通过node.msi的方式安装的,或者在PATH环境变量中。这段命令也会将npm加入到PATH环境变量中去,之后可以随处执行npm命令。如果安装中遇到权限方面的错误,请确保cmd命令行工具是通过管理员身份运行的。安装成功后,执行以下命令:

npm install underscore 

返回:

underscore@1.2.2 ./node_modules/underscore 

如此,Windows平台下的NPM安装完毕。如果遭遇网络问题无法安装,请参照Linux下的NPM命令,添加镜像地址。

参考文献

关于作者

田永强,新浪微博@朴灵,前端工程师,现职于SAP,从事Mobile Web App方面的研发工作,对NodeJS持有高度的热情,寄望打通前端JavaScript与NodeJS的隔阂,将NodeJS引荐给更多的前端工程师。兴趣:读万卷书,行万里路。个人Github地址: http://github.com/JacksonTian

关注IT趋势,承载前沿、深入、有温度的内容。感兴趣的读者可以搜索ID:laocuixiabian,或者扫描下方二维码加关注。


感谢崔康对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

忘了苦逼装法吧,用用nvm by Ma Devis

忘了苦逼装法吧,用用nvm

npm的包依赖也是件痛苦的事情 by echo ECHO

跟linux下的rpm一样,依赖关系搞的头大!

再也不用装虚拟机来安装组件了! by echo ECHO

之前怎么没发现这个呢,还折腾一个虚拟机。

win7 下载了node-v0.6.1.msi, 不能安装 by 杨 津萍

提示:无法通过windows Installer 服务安装此安装程序包。您必须安装带有更新版本Windows Installer服务的 Windows Service Pack。

Re: win7 下载了node-v0.6.1.msi, 不能安装 by 杨 津萍

提示: filenodeexe 已损坏。

Re: win7 下载了node-v0.6.1.msi, 不能安装 by 杨 津萍

通过IE 9自带方式下载时出现文件损坏,用迅雷等工具下载正常安装。

怎么run helloworld by song wu

examp.js放哪里呢?如果windows默认路径安装

windows下安装完msi,npm就包含在其中了.不需额外安装. by bird max

Windows Computers

Get the MSI. npm is in it.

最新node.msi集成了npm by Huang ZhenYong

最新node.msi集成了npm

win7安装成功,运行不成功 by Y Tear

在win7下成功安装了msi,可是运行node.exe node -t会报node is not defined的错误,

http://www.ibm.com/developerworks/cn/java/j-nodejs/ by 陈 志明

很好使用,也很方便就安装好了。

Re: 最新node.msi集成了npm by 胡 斌

是的 已经集成了

express 不支持windows by chin lon

express 不支持windows 囧

xuexixuexi by 张章 鸥翔鱼游

学习学习~~~偷师本学徒来偷偷~~~

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

14 讨论
提供反馈
错误报告
商务合作
内容合作
Marketing
InfoQ.com及所有内容,版权所有 © 2006-2016 C4Media Inc. InfoQ.com 服务器由 Contegix提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司 京ICP备09022563号-7 隐私政策
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.