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

简介:

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

第1章 Node.js:启动与运行

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中最重要的事件循环机制。

1.1 搭建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使用。

提示:
可以从这个地址下载Node源代码及安装包:http://nodejs.org/#download。Wiki关于多种环境中安装Node的说明:https://github.com/joyent/node/iki/Installing-Node-via-package-manager。鉴于Node不时会有版本更新,建议读者自己搜索最新的关于特定环境下安装Node的教程。

1.1.1 Linux(Ubuntu)下安装Node

在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命令来确认是否已安装了需要的库:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential openssl libssl-dev pkg-config

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

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

wget http://nodejs.org/dist/v0.8.2/node-v0.8.2.tar.gz

下载完成后,解压:

tar -zxf node-v.tar.gz

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

./configure
make
sudo make install

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

提示:
编程的挑战在于没有两个系统是一样的。在大部分Linux环境下这一系列安装步骤应该是能工作且可以成功的。但是,关键词是“应该”。
是否注意到最后一条命令的sudo?这是为了以root权限在Linux中安装Node。不过,你还可以用以下命令在指定的下级目录中安装Node:

mkdir ~/working
./configure --prefix=~/working
make
make install
echo 'export PATH=~/working/bin:${PATH}' >> ~/.bashrc 
. ~/.bashrc

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

提示:
如果使用sudo,你需要root或者超级用户的权限。此时你的用户名必须存在于/ect/sudoers文件的列表中。
尽管可以将Node安装到本地路径,但是如果考虑到我们所有的安装步骤都是在一个共享的主机环境下进行的,是否能采用这种安装方式还需三思。因为安装Node只是第一步,接下来你还需要权限来编译Node应用程序,需要权限来让程序运行在特定端口(比如80)。事实上绝大多数共享主机环境并不会允许我们在本地路径下随意安装特定版本的Node。

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

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

1.1.2 Windows 7平台下Node+WebMatrix

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

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

提示:
Windows Azure SDK for Node安装说明:https://www.windowsazure.com/en-us/develop/nodejs/
另一种在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服务器的开发版本。

WebMatrix的下载地址:http://www.microsoft.com/Web/Webmatrix/


6c0dd0b17fa6273e3d0703b2003bf341b413b955

WebMatrix安装完成后,可以使用Node官网(http://nodejs.org/#download)提供的安装包安装最新版本的Node。过程很简单,一键安装完成后打开命令行窗口输入node检查是否能正常运行,如图1-2所示。


0d2c3ac98f708beac405ac1af499b6498dfc1043

为了能让Node与Windows下的IIS一起工作,我们需要安装iisnode。iisnode是一个本地IIS7.x模块,由Tomasz Janczuk创建并维护。它在Git Hub站点中的链接地址为:https://github.com/tjanczuk/iisnode

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

在安装iisnode的过程中,可能会碰到图1-3所示的弹出窗口,提示系统环境中未安装Microsoft Visual C++ 2010 Redistributable Package。如果你碰到了这种情况,则需要安装该组件,同时还需要保证你安装的版本与当前正在安装的iisnode的版本是兼容的:可以从x86版本(从地址http://www.microsoft.com/download/en/details.aspx?id=5555获得)或x64版本(从地址http://www.microsoft.com/download/en/details.spx?id=14632获得)中选择安装,或者两个版本都安装。在成功安装好C++ Redistributable Package后,就可以再次运行iisnode安装程序了。


15f1e5c01154731c8aded911ac9c6f510aca3cf7

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

最后还需要为WebMatrix下载并安装Node模板,这样就完成了WebMatrix/Node的所有安装。Node模板由Steve Serson创建,可以在地址https://github.com/SteveSanderson/Node-Site-Templates-for-WebMatrix下载。

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


9099fdec567de406f19a78d5ec46166c71b548e3

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


607b639f23146d284963054c114b0b89abb03c65

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


772e0d207e2fe55f175624441d735e7877bcd3fd

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

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end('Hello, world!');
}).listen(process.env.PORT || 8080);

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

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

1.1.3 升级Node

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

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

make uninstall

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

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

你可以从GitHub上下载Nvm,地址是https://github.com/creationix/nvm。与Node一样,你必须在你的系统中编译并安装Nvm。

使用Nvm安装指定版本的Node:

nvm install v0.4.1

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

nvm run v0.4.1

查看可用的Node版本信息:

nvm ls
相关文章
|
11天前
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
|
4天前
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第二章(Node连接本地数据库)
【4月更文挑战第2天】本文介绍了如何使用Node.js连接本地MySQL数据库。首先,提到了在MySQL官网下载安装数据库和使用Navicat for MySQL进行数据库管理。接着,通过`yarn add mysql`在项目中安装数据库依赖。然后,创建`app.js`文件,设置数据库连接参数,并建立连接进行查询操作。遇到导入模块的错误后,修改导入方式为CommonJS语法。
17 1
|
26天前
|
Web App开发 JavaScript 前端开发
js开发:请解释什么是Node.js,以及它的应用场景。
Node.js是基于V8的JavaScript运行时,用于服务器端编程。它的事件驱动、非阻塞I/O模型使其在高并发实时应用中表现出色,如Web服务器、实时聊天、API服务、微服务、工具和跨平台桌面应用(使用Electron)。适用于高性能和实时需求场景。
18 4
|
1月前
|
JavaScript 前端开发 Serverless
函数计算新功能— 支持 Node.js 18 、Node.js 20 运行时
从2024年2月起,函数计算正式发布 Node.js 18 运行时和 Nodejs.20 运行时,函数计算2.0和函数计算3.0都支持新的运行时,目前新运行时处在公测状态,欢迎大家来体验。
454 0
|
1月前
|
JavaScript 前端开发 开发者
如果你想在钉钉环境中运行JavaScript脚本
【2月更文挑战第17天】如果你想在钉钉环境中运行JavaScript脚本
34 6
|
Web App开发 JavaScript 索引
|
2月前
|
JSON JavaScript 前端开发
JS服务端技术—Node.js知识点
本篇文章是我开始系统学习Node.js的一些笔记。如果文中阐述不全或不对的,多多交流。
62 0
JS服务端技术—Node.js知识点
|
3月前
|
JavaScript
node下的two.js调用one.js出现无法编译问题 Cannot find module ‘c:
node下的two.js调用one.js出现无法编译问题 Cannot find module ‘c:
47 0
|
3月前
|
JavaScript
Turndown 源码分析:五、节点相关`root-node.js`和`node.js`
Turndown 源码分析:五、节点相关`root-node.js`和`node.js`
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
70 0