天天看点

《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境

本节书摘来自异步社区《node学习指南》一书中的第1章,第1.1节,作者【美】shelley powers,更多章节内容可以访问云栖社区“异步社区”公众号查看

node学习指南

node.js是以google v8 javascript引擎为基础的服务器端技术。它具有很好的可扩展性,并使用了异步事件驱动io,而没有使用线程或者独立进程。它能很好地满足那些需要频繁访问但是计算简单的网络应用的需求。

使用传统的web服务器时,比如apache,每次接收到用户对网络资源的请求时,apache都会创建一个线程或者调用新的进程来处理。尽管apache对请求的响应速度非常快,并在请求处理完毕后清理现场,但这种实现仍然占用了很多资源。访问频繁的网络应用会因此产生严重的性能问题。

相较而言,node不会为每个请求创建新的进程或者线程。相反,它对特定事件进行监听,当事件发生时按需做出响应。在等待事件的过程中node并不阻止任何请求,并且事件循环是按照先到先得的简单方式进行处理。

与编写客户端应用程序所使用的语言一样,node应用程序也是用javescript编写的(或者其他可以编译成javescript的语言)。不过与前者不同的是,做node应用程序开发前,首先需要搭建开发环境。

node支持unix/linux、maxos以及windows等多种操作系统。本章会告诉你在安装node之前需要完成的准备工作,并带领你学习如何在windows7和linux(ubuntu)系统上搭建node开发环境。mac系统的安装过程与linux类似。

当搭建好开发环境后,我们会通过一个简单的node示例应用,来说明node中最重要的事件循环机制。

安装node有多种方法。选择什么样的方法取决于你当前使用的开发环境,以及你希望如何使用源代码或者计划如何在你现有的应用程序中使用node。

windows和mac os都有相应的安装包,但是你也可以复制node源代码并自行编译安装。在windows、linux和mac os环境中,你也可以使用git的clone命令来复制node的repo(repository,代码库)。

本节演示如何在linux系统中(ubuntu 10.04 vps,或者虚拟服务器)通过编译源码搭建node环境,同时也会演示如何在windosw7系统上安装node,以便配合microsoft webmatrix使用。

提示:

在linux下安装node之前,你需要先做一些准备工作。按照wiki node词条中提到的步骤首先要确认是否安装python,如果计划使用ssl/tls(secure sockets layer,安全套接层/transport layer security,传输层安全)还需要安装libssl-dev。某些linux系统中默认安装了python。如果没有,则可以使用系统包安装工具安装python的稳定版本,如2.6或者2.7(node最新版本所要求的python版本号)。

本书假定你有javascript和传统web开发的经验。如果这样的话,我可能是过于谨慎了,并且在描述如何安装node的前期准备上太啰唆了。

对ubuntu和debian来说还需要安装其他的库。大部分debian gnu/linux系统中都支持apt(advanced packaging tool)工具,你可以用以下apt命令来确认是否已安装了需要的库:

update命令用于确认系统上的包都更新了,upgrade命令用于升级过期的包。第三条命令用于安装需要的包。任何包依赖都由包管理工具管理。

当准备好环境后,下载node tarball(源代码的压缩文件)。本书使用wget,你也可以使用curl。在编写本书的时候node的最新版本是0.8.2:

下载完成后,解压:

得到目录node-v。进入该目录,使用以下命令编译安装node:

考虑到某些读者之前没在unix中使用过make命令,同此,对这三条命令简单说明一下:第一条命令首先进行依赖检查,然后根据你的系统环境和安装情况建立makefile,然后执行make命令编译最后一条命令执行安装操作。在这些命令执行后,node即安装完毕并可以通过命令行全局访问。

编程的挑战在于没有两个系统是一样的。在大部分linux环境下这一系列安装步骤应该是能工作且可以成功的。但是,关键词是“应该”。

是否注意到最后一条命令的sudo?这是为了以root权限在linux中安装node。不过,你还可以用以下命令在指定的下级目录中安装node:

可以看到,通过设置prefix配置选项,你可以将node安装到本地指定路径的目录中。另外别忘记你可能还需要相应地为path环境变量做些更新。

如果使用sudo,你需要root或者超级用户的权限。此时你的用户名必须存在于/ect/sudoers文件的列表中。

尽管可以将node安装到本地路径,但是如果考虑到我们所有的安装步骤都是在一个共享的主机环境下进行的,是否能采用这种安装方式还需三思。因为安装node只是第一步,接下来你还需要权限来编译node应用程序,需要权限来让程序运行在特定端口(比如80)。事实上绝大多数共享主机环境并不会允许我们在本地路径下随意安装特定版本的node。

除非有特殊原因,依然推荐使用sudo安装node。

在本书第4章我们会提到,使用root权限运行node 包管理工具(npm)曾经存在的一个安全顾虑。但是,目前这些安全问题已经解决。

你可以按照之前wiki页面中的安装步骤完成windows系统下node的安装。但一般来说,node只是作为windows web开发架构的一部分。

目前有两种windows web开发架构适合使用node。一种叫做windows azure云平台,允许开发人员将程序托管在远端服务器(称为云)上。microsoft提供了关于如何在windows azure sdk中安装node的说明,所以本章不涉及这一过程(不过稍后会对该sdk进行说明)。

另一种在windows系统(本处指windows 7)使用node的方式是将node与microsoft webmatrix集成。webmatrix是网络开发人员用于集成开源技术的一种工具。以下是在windows 7 webmatrix中集成并运行node的步骤:

1.安装webmatrix;

2.使用最新的windows安装包安装node;

3.安装iisnode for iis express 7.x,以便让windows上的iis支持node应用程序;

4.为webmatrix安装node模板,使用模板可以简化node开发。

如图1-1所示,使用microsoft web platform installer安装webmatrix,同时会安装iis express。iis express是microsoft web服务器的开发版本。

《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境
《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境

iisnode有x86和x64两种,但是对于x64系统,两个都需要安装。

《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境

如果你还想安装iisnode的附带的示例代码,则需要以管理员权限打开命令窗口,进入到iisnode的安装目录中(“program files__for 64- bit”或者“program files (x86)”)然后运行名为setupsamples.bat的批处理文件。

你可以通过如下步骤来测试以上工作的正确性,首先运行webmatrix,在打开页面中选择“site from template”选项。然后,图1-4所示页面会打开,你可以看到两个node模板选项:一个是“express”(在第7章介绍),另一个是“a basic, empty site configured for node”。选择后者,并使用“first node site”或者一个你喜欢的名称为新建的站点命名。

《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境

使用webmatrix生成的新站点如图1-5所示。点击页面左上角的run按钮,浏览器窗口会弹出并显示包含有“hello, world!”信息的页面。

《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境

如果你在使用windows防火墙,第一次运行一个node应用程序时,你可能会得到一个如图1-6所示的警告信息。这时,你需要点击“private networks”选项然后按下“allow access”按钮,以便让防火墙知道该程序是被允许在开发机器的私有网络上通信的。

《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境

在新生成的webmatrix node工程中,存在一个名为app.js的文件。这是一个node程序文件,包含了如下代码:

我会在本章第二部分对这段代码的相关部分进行详细介绍。目前,我们只需要知道这段代码实现了一个简单的服务端,它只给客户端返回“hello, world!”。而且我们可以在任何安装有node环境的系统中运行这段代码,并且能得到同样的功能。

若需要在webmatrix中查看iisnode的示例,则需要在webmatrix中选择选项“site from folder”,然后在弹出的对话框中输入如下内容:%localappdata%iisnodewww。

偶数版本号代表了node的稳定发行版本,例如当前的0.8.x版本,而奇数版本号表示node的开发版本(当前是0.9.x)。在你有一些node使用经验前,我建议选择稳定发行版本。

升级node版本并不复杂。如果你使用安装包来做升级,那么旧版本的node将自动被新版本覆盖。如果你直接使用源代码升级,为了避免潜在的混乱或者文件冲突,你始终应该先在旧版源代码目录中执行卸载命令,然后再安装新版本。在node源代码目录中,可以运行如下make命令执行卸载:

下载新的源代码,编译然后安装它。当再有版本更新时,你需要再次执行以上过程。

升级node的挑战在于,新版本的node是否还能兼容特定的环境、模块或者node应用程序。大多数情况下,你不会碰到版本问题。然而,如果你碰到了,你可以使用node版本管理器(nvm, node version manager)在多个node版本之间切换。

使用nvm安装指定版本的node:

使用如下命令切换到指定node版本:

查看可用的node版本信息: