第一篇,第一篇Node.js

web 5
概述和开发环境的搭建 本篇介绍开发Node.js的主要特点、发展历史和开发环境的搭建,主要包括Node.js的特性、应用场景、开发环境的搭建以及开发工具的选择。
第1章 ◄Node.js介绍► Node.js是一个基于JavaScript的跨平台开发语言。
随着全栈开发技术的不断推广和日益盛行,Node.js逐渐成为一种非常流行的开发语言。
本章主要对Node.js进行整体介绍,并对其发展历史和相关版本进行详细的说明,同时也包含在今后开发中所涉及的基础知识。
通过本章的学习可以掌握以下内容:Node.js的发展历史和特点。
V8引擎的介绍及其与Node.js之间的关系。
Node.js的一些应用场景。
Node.js在中国的发展及相关资源。
1.1Node.js简介 Node.js是一个基于Google所开发的浏览器ChromeV8引擎的JavaScript运行环境。
Node.js使用多种先进的技术,其中包括事件驱动、非阻塞式I/O模型,使其轻量又高效,受到众多开发者的追捧。
简单来说,Node.js就是运行在服务端的JavaScript,可以稳定地在各种平台下运行,包括Linux、Windows、MacOSX、SunOS和FreeBSD等众多平台。
作为Web前端最重要的语言之
一,JavaScript一直是前端工程师的专利。
不过,Node.js是一个后端的JavaScript运行环境(支持的系统包括Linux、Windows),这意味着我们可以编写系统级或者服务器端的JavaScript代码,交给Node.js来解释执行。
简单的Node.js命令类似于: #nodehelloworld.js 由于采用V8引擎执行JavaScript的速度非常快,因此Node.js所开发出来的应用程序性能非常好。
Node.js已经成为全栈开发的首选语言之
一,并且从它衍生出众多出色的全栈开发框架。
Node已经在全球被众多公司使用,包括创业公司Voxer、Uber以及沃尔玛、微软这样的知名公司。
它们每天通过Node处理的请求数以亿计,可以说在要求苛刻的服务器系统,Node.js也可以轻松胜任。
Node.js开发实战 Node.js还包括一个完善的社区。
在Node.js的官方网站/可以找到大量的文档和示例程序,并且Node.js还有一个强大的包管理器NPM。
渐渐地,越来越多的人参与到本项目中来,可用的第三方模块和扩展增长迅猛,而且质量也在不断提升,Node已是全球较大的开源库生态系统之
一。
Node.js不是一个JavaScript应用,而是一个JavaScript的运行环境,由C++语言编写而成。
1.2Node.js的发展历史和特点 任何语言或框架都不是一天形成的,而是经过漫长的测试、发布、再测试、再发布的迭代过程。
本节就来介绍一下Node.js的发展过程。
1.2.1Node.js发展历史 Node.js的创始人是大名鼎鼎的RyanDahl。
他本来是学数学的,2008年末一个偶然的机会让他了解到Google推出了一个新的浏览器Chrome和崭新的JavaScript引擎V8。
他听说这是一个为了更快的Web体验而专门制作的更快的JavaScript引擎,V8能够让Web应用大大提速。
当时,他正在寻找一个新的编程平台来做网站,他非常希望能找到一种语言能提供先进的推送功能并集成到网站中,而不是采用传统的方式——不断轮询拉取数据。
RyanDahl对C/C++和系统调用非常熟悉,他使用系统调用(用C)实现消息推送这样的功能。
如果只使用非阻塞式Socket,每个连接的开销都会非常小。
在小规模测试中,它能同时处理几千个闲置连接,并可以实现相当大的吞吐量。
但是,他并不想使用
C,他希望能采用另外一种漂亮灵活的动态语言。
他最初也希望采用Ruby来写Node.js,但是后来发现Ruby虚拟机的性能不能满足要求,后来便尝试采用V8引擎,所以选择了C++语言。
2009年2月,RyanDahl首次在自己的博客上宣布准备基于V8创建一个轻量级的Web服务器并提供一套库,并在2009年5月正式在GitHub上发布最初版本的部分Node.js包。
随后几个月里,有人开始使用Node.js开发应用。
实践证明,JavaScript与非阻塞Socket配合得相当完美,只需要简单的几行JavaScript代码就可以构建出非常复杂的非阻塞服务器。
2010年年底,Node.js获得云计算服务商Joyent资助。
创始人RyanDahl加入Joyent,全职负责Node.js的发展。
Node.js从此以后迅猛发展,并成为一种流行的开发语言。
在官方网站上Node.js的版本号是从0.1.14开始的,每个发布版本对应不同的V8引擎版本和NPM包管理器版本,截止作者写作时最新的版本为V6.11.0,其各个版本的具体发布时间参见表1-1(2014年以后)。

4 版本Node.jsv6.11.0Node.jsv6.0.0Node.jsv5.0.0Node.jsv4.2.0Node.jsv4.0.0 表1-
1 Node.js版本日期2017-06-062016-04-262015-10-292015-10-122015-09-08 第1章Node.js介绍 从1.x到3.x的版本之间Node.js的名称曾经被修改为io.js,后来io.js的全部代码合并到Node.js的主干发布版本。
Node.js的发展大致可以分为以下4个阶段。

(1)发展初期。
创始人RyanDahl带着他的团队开发出以Web为中心的Web.js,一切都非常混乱,API大多都处于研究阶段。

(2)快速发展时期。
Node.js的核心用户IsaacZ.Schlueter开发出奠定了Node.js如今地位的重要工具——NPM,同时也为他后来成为Ryan接班人的重要条件。
之后Connect、Express、Socket.io等库的出现吸引了一大波爱好者加入到Node.js开发者的阵营中来。
CoffeeScript的出现更是让不少Ruby和Python开发者找到了学习的理由。
其间一大波以Node.js作为运行环境的CLI工具涌现,其中不乏用于加速前端开发的优秀工具,如Less、UglifyJS、Browserify、Grunt等。
这个阶段Node.js的发展势如破竹。

(3)不稳定时期。
经过了一大批一线工程师的探索实践后,Node.js开始进入时代的更迭期,新模式代替旧模式,新技术代替旧技术,好实践代替旧实践。
ES6也开始出现在Node.js世界中。
ES6的发展越来越明显,V8也对ES6中的部分特性实现了支持,如Generator等。

(4)稳步发展时期。
随着ES2015的发展和最终定稿,一大批利用ES2015特性开发的新模块出现,如原Express核心团队所开发的Koa。
Node.js之父RyanDahl退出Node.js的核心开发,转而做其他的研究项目。
RyanDahl的接任者IsaacSchlueter(也是Node.js的核心构建者)将Node.js一直开发下去并不断完善。
1.2.2Node.js未来版本规划 Node.js的核心团队已经为Node.js的长远发展做好了详细计划。
图1.1是Node.js到2018年为止的所有版本计划及发布时间表。

5 Node.js开发实战 图1.1计划及发布时间表 1.2.3Node.js的结构 前面介绍了Node.js是一个完整的JavaScript开发环境,并且是基于Google的ChromeV8引擎进行代码解释的。
它在设计之初就已经定位用来解决传统Web开发语言所遇到的诸多问题,所以Node.js有很多其他开发语言所不具备的优点,包括事件驱动、异步编程等。
下面我们先介绍一下Node.js的结构,然后详细分析Node.js的一些主要特点。
图1.2中浅绿色的部分是由JavaScript编写的,深绿色的是由C/C++完成的。
从图1.2中可以看出来,Node.js的结构大致分为以下3个层次。
Node.js标准库。
这部分是由JavaScript编写的,即我们使用过程中直接能调用的API。
在源码中的lib目录下可以看到。
Nodebindings。
这一层是JavaScript与底层C/C++能够沟通的关键,前者通过bindings调用后者,相互交换数据。
支撑Node.js运行的基础构件。
这层内容比较多,下面详细介绍。
支撑Node.js运行的基础构件是由C/C++实现的,其中包括4大部分。
V8:Google推出的JavaScriptVM,也是Node.js为什么用JavaScript的关键,它为JavaScript提供了在非浏览器端运行的环境,它的高效是Node.js之所以高效的原因之
一。
libuv:为Node.js提供了跨平台、线程池、事件池、异步I/O等能力,是Node.js如此强大的关键。
C-ares:提供了异步处理DNS相关的能力。
http_parser、OpenSSL、zlib等:提供包括HTTP解析、SSL、数据压缩等能力。

6 第1章Node.js介绍 图1.2Node.js的结构 1.2.4Node.js的特点 都说Node.js强大,这种强大体现在很多方面,如事件驱动、异步处理、非阻塞I/O等。
这里将介绍Node.js具备的不同于其他框架的特点。

1.事件驱动在某些传统语言的网络编程中,我们会用到回调函数,比如当Socket资源达到某种状态时,注册的回调函数就会执行。
Node.js的设计思想中以事件驱动为核心,它提供的绝大多数API都是基于事件的、异步的风格。
以Net模块为例,其中的.Socket对象就有以下事件:connect、data、end、timeout、drain、error、close等。
使用Node.js的开发人员需要根据自己的业务逻辑注册相应的回调函数。
这些回调函数都是异步执行的。
这意味着虽然在代码结构中这些函数看似是依次注册的,但是它们并不依赖于自身出现的顺序,而是等待相应的事件触发。
事件驱动的优势在于充分利用了系统资源,执行代码无须阻塞等待某种操作完成,有限的资源可以用于其他的任务。
此类设计非常适合于后端的网络服务编程,Node.js的目标也在于此。
在服务器开发中,并发的请求处理是一个大问题,阻塞式的函数会导致资源浪费和时间延迟。
通过事件注册、异步函数,开发人员可以提高资源的利用率,性能也会改善。

2.异步、非阻塞I/O从Node.js提供的支持模块中,我们可以看到包括文件操作在内的许多函数都是异步执行的。
这和传统语言存在区别。
为了方便服务器开发,Node.js的网络模块特别多,包括HTTP、DNS、NET、UDP、HTTPS、TLS等。
开发人员可以在此基础上快速构建Web服务器。
一个异步I/O的大致流程如图1.3所示,讲解如下:
(1)发起I/O调用①用户通过JavaScript代码调用Node核心模块,将参数和回调函数传入核心模块。
②Node核心模块会将传入的参数和回调函数封装成一个请求对象。
③将这个请求对象推入I/O线程池等待执行。

7 Node.js开发实战④JavaScript发起的异步调用结束,JavaScript线程继续执行后续操作。

(2)执行回调①I/O操作完成后会将结果储存到请求对象的result属性上,并发出操作完成的通知。
②每次事件循环时会检查是否有完成的I/O操作,如果有就将请求对象加入I/O观察者 队列中,之后当作事件处理。
③处理I/O观察者事件时会取出之前封装在请求对象中的回调函数,执行这个回调函数, 并将result当作参数,以完成JavaScript回调的目的。
Node.js的网络编程非常方便,提供的模块(在这里是HTTP)开放了容易上手的API接 口,短短几行代码就可以构建服务器。
图1.3异步I/O的流程
3.性能出众创始人RyanDahl在设计的时候就考虑了性能方面的问题,选择C++和V8,而不是Ruby或者其他的虚拟机。
Node.js在设计上以单进程、单线程模式运行。
事件驱动机制是Node.js通过内部单线程高效率地维护事件循环队列来实现的,没有多线程的资源占用和上下文切换。
这意味着面对大规模的HTTP请求,Node.js是凭借事件驱动来完成的。
从大量的测试结果分析来看,Node.js的处理性能是非常出色的,在qps达到16700次时,内存仅占用30MB(测试环境:RHEL5.2、CPU2.2GHz、内存4GB)。

4.单线程Node.js和大名鼎鼎的Nginx一样,都是以单线程为基础的。
这正是Node.js保持轻量级和
8 第1章Node.js介绍 高性能的关键,也是RyanDahl设计Node.js的初衷。
这里的单线程是指主线程为“单线程”,所有阻塞的部分交给一个线程池处理,然后这个主线程通过一个队列跟线程池协作。
我们写的js代码部分不用再关心线程问题,代码也主要由一堆callback回调构成,然后主线程在循环过程中适时调用这些代码。
单线程除了保证Node.js高性能之外,还保证了绝对的线程安全,使开发者不用担心同一变量同时被多个线程读写而造成的程序崩溃。
1.2.5Node.js的应用场景 Node.js的可以应用到很多方面,可以说从Node.js开始程序员们可以使用JavaScript来开发服务器端的程序了。
Node.js为前端开发程序员们提供了便利,并在各大网站中承担重要角色,成为开发高并发大型网络应用的关键技术。
Web站点早已不仅限于内容的呈现,很多交互性和协作型环境也逐渐被搬到了网站上,而且这种需求还在不断地增长。
这就是所谓的数据密集型实时(data-intensivereal-time)应用程序,比如在线协作的白板、多人在线游戏等,这种Web应用程序需要一个能够实时响应大量并发用户请求的平台支撑它们,这正是Node.js擅长的领域。
此外,Node.js的跨平台特性也是使用Node.js语言开发流行的另一大原因。
Node.js的主要应用场景如下: JSONAPIs——构建一个Rest/JSONAPI服务,Node.js可以充分发挥其非阻塞IO模型以及JavaScript对JSON的功能支持(如JSON.stringfy函数)。
单页面、多Ajax请求应用——如Gmail,前端有大量的异步请求,需要服务后端有极高的响应速度。
基于Node.js开发UNIX命令行工具——Node.js可以大量生产子进程,并以流的方式输出,这使得它非常适合做UNIX命令行工具。
流式数据——传统的Web应用,通常会将HTTP请求和响应看成原子事件,而Node.js会充分利用流式数据这个特点,构建非常酷的应用,如实时文件上传系统transloadit。
准实时应用系统——如聊天系统、微博系统,但JavaScript是有垃圾回收机制的,这就意味着系统的响应时间是不平滑的(GC垃圾回收会导致系统这一时刻停止工作)。
如果想要构建硬实时应用系统,Erlang是一个不错的选择。
例如,实时互动交互比较多的社交网站,像Twitter这样的公司,它必须接收tweets并将其写入数据库。
实际上,每秒几乎有数千条tweet达到,数据库不可能及时处理高峰时段所需的写入数量。
Node成为这个问题解决方案的重要一环。
Node能处理数万条入站tweet。
它能快速而又轻松地将它们写入一个内存排队机制(例如memcached),另一个单独进程可以从那里将它们写入数据库。
Node能处理每个连接而不会阻塞通道,从而能够捕获尽可能多的tweets。
虽然看起来Node.js可以做很多事情,并且拥有很高的性能,但是Node.js并不是万能的,有一些类型的应用,Node.js可能处理起来会比较吃力。
例如,CPU密集型的应用、模板渲染、压缩/解压缩、加/解密等操作都是Node.js的软肋。

9 Node.js开发实战 1.3Node.js在中国的发展 Node.js在初期发展的时候,国内就有大量的开发者开始持续关注了。
随着Node.js的不断成熟,很多国内的公司都开始采用这一新技术。
2013年、2014年、2015年的JS中国开发者大会都将Node.js作为一个主要的宣讲内容,Node.js也被国内的开发爱好者所追捧。
Node.js开发者在国内的数量不断增加,并涌现出很多组织和机构来自发地进行推广和技术分享。
国内的各大视频培训网站上都有Node.js开发的培训教程,各大门户网站也都或多或少地采用了Node.js的开发技术,淘宝、网易、百度等有很多项目运行在Node.js之上。
阿里云是在这方面比较靠前的公司,它们的云平台率先支持Node.js的开发。
淘宝也为Node.js搭建了国内的NPM镜像网站,方便国内的开发者下载各种开发包。
1.3.1Node.js中文资源汇总
(1)Node.js官方网站,是Node.js在国内的官方网站,有关于Node.js最新版本的下载和新闻,丰富的文档资料非常值得认真学习,是Node.js开发爱好者不容错过的网站,网址为/。

(2)CNode社区,由一批热爱Node.js技术的工程师发起,已经吸引了互联网各个公司的专业技术人员加入,是目前国内非常具有影响力的Node.js开源技术社区,致力于Node.js的技术研究,并有论坛会定期组织一些技术交流活动,网址为。

(3)Node.js中文网,是一个专业的Node.js中文知识分享社区,致力于普及Node.js知识,分享Node.js研究成果,努力推进Node.js在中国的应用和发展,网站有大量的技术博客和文章,各个级别的开发者都能找到适合自己学习的资料,网址为WWW.Node.js.Net。

(4)淘宝NPM镜像,是一个完整镜像,可以用此代替官方版本,同步频率为每10分钟一次,以保证尽量与官方服务同步,网址为/。

(5)Node.js&HTML5论坛,也是一个学习Node.js和前端开发技术非常好的网站,每天都有大量原创文章发布,并且技术问题可以很快被回答。
当然,如果愿意为其他人解答技术问题或者进行技术分享也是非常欢迎的。
其网址为/。
每年的JS中国开发者大会和各种Node.js分享沙龙也都是很好的学习Node.js开发技术和交流的机会。
一个开发者要时刻保持谦虚的心态,并不断学习最新的技术。
这对开发者来说是一种基本能力和素养。
1.3.2Node.js的发展和未来 Node.js虽然在创建之初是为了开发即时通信的Web应用,当然现在的Node.js已绝不只是一套简单的Web堆栈——作为一项技术,它在多个层面焕发出勃勃生机,价值已经远远超出了常见Web服务器的范畴。
10 第1章Node.js介绍例如,一款由JacobGroundwater打造的项目叫NodeOS,其创始人希望围绕Linux核心建立起一套新型环境。
其中,Node.js作为“shell”,而Node的NPM则被用于系统包管理器。
到目前为止,NodeOS的首个版本已经创建完成。
Node.js还被用来作为硬件控制的工具替代C/C++,Noduino允许大家经由WebSocket或者串连接实现Arduino访问。
该项目虽尚处于起步阶段,但驱动主板上的LED模块、捕捉来自Arduino的事件(例如按下按钮)等常见功能都已可以正常支持,以后就可以通过网页直接控制Arduino硬件和其他物联网设备了。
2016年Node.js发布了两个重量级的版本v4.4.0LTS(长期支持版本)和v5.9.0Stable(稳定版本),并且成立了Node.js基金会,能够让Node.js在未来有更好的开源社区支持。
Node.js基金会的创始成员包括Joyent、IBM、Paypal、微软、Fidelity和Linux基金会。
Node.js的core(核心)已经非常稳定并逐步被广大开发者所认可,进行大规模使用。
著名的Node.js包管理工具NPM在2014年成为软件开发世界中包管理工具的龙头老大,现在NPM包含的模块数是Java以及Ruby的包管理工具模块数目的两倍!图1.4反映了NPM包管理工具的增长情况。
图1.4NPM包管理工具的增长情况 数据来源/。
2017年上半年Node.js和NPM的普及率进一步提升。
大公司对Node.js的应用持续提升,并推出更多对企业级友好功能的长期计划,可能预示着Node.js在企业中会持续增长,替换一部分在企业中像Java和.NET这样的典型解决方案。
Node.js诞生于2009年,其年龄远不如Python、Ruby、PHP等老牌开发语言,但是它成为有史以来发展最快的开发工具。
可以预见,在未来的几年Node.js技术会不断发展起来,成为Web开发的核心技术,并从现有的Java、PHP等语言中争夺到更多的份额。
11 Node.js开发实战 1.4温故知新 学完本章中,读者需要回答:
1.Node.js有哪几大主要特性?
2.在选择Node.js开发的时候有哪些注意事项? 12 第2章 ◄部署Node.js开发环境► 部署Node.js的开发环境是开始正式接触Node.js的第一步。
Node.js可以在多个不同的平台稳定运行,并且具有良好的兼容性。
但是Node.js部署在不同操作系统下的方法并不完全一致,本章主要介绍如何在各个操作系统平台下进行Node.js的部署。
通过本章的学习可以掌握以下内容:Windows部署:学会如何在Windows操作系统上安装Node.js。
Linux部署:学会在各种Linux发行版本上部署Node.js开发环境。
MacOSX部署:学会在Mac的OSX系统上部署Node.js开发环境。
树莓派3部署:学习如何使用nvm在树莓派3上部署Node.js开发环境。
开发工具介绍:介绍SublimeText3的使用方法和Node.js插件的安装。
2.1Windows10下部署Node.js开发环境 Node.js可以在Windows系统下稳定运行,本节主要介绍Windows10下的Node.js环境部署。
在Windows中进行Node.js环境部署是相对比较简单的,首先从Node.js的官方网站(/en/download/)上下载最新的Windows安装包,国内用户可以通过Node.js官方中文站点/download/进行下载。
中文站点的下载页面和英文版的布局略有不同,中文版只提供最新发布版本的下载,而英文站点同时提供最新稳定版本和最新版本两个版本的下载链接。
Node.js的其他发布版本可以从/dist/链接找到,本文以v6.2.0在Windows10进行安装为例。
Node.js的安装包在Windows平台分为installer和Binary两个版本。
installer是通常的安装包发布版本(.msi)。
Binary为二进制版本,可以下载后直接运行(.exe)。
这里建议使用后缀为.msi的安装版本。
此外,Node.js的安装包分为32位和64位,在下载的时候请查看系统的具体信息,并选择正确的安装包进行下载和安装。
打开下载网站的界面,如图2.1所示。
读者根据系统选择,比如笔者选择64位的Windows系统,下载的是node-v6.2.0-x64.msi。
Node.js开发实战 图2.1Node.js官方网站下载页面如果选择Node.js之前的版本,可以在官方网站中找到PreviousReleases链接,然后查找需要的版本号。
2.1.1使用安装包进行Node.js安装
(1)安装包下载完之后是一个10MB大小的后缀名为msi的安装文件,双击下载后的安装包文件,首先弹出询问界面,如图2.2所示。
单击图2.2中的Run(运行)按钮会出现欢迎界面,直接单击Next按钮进入下一步。
图2.2Node.js安装步骤-
1
(2)出现图2.3所示的界面。
勾选接受协议选项后Next按钮会变为可用状态,单击Next按钮进入下一步。
14 第2章部署Node.js开发环境 图2.3Node.js安装步骤-
2
(3)此时打开Node.js,默认安装目录为C:\ProgramFiles\nodejs\,如图2.4所示。
我们既可以通过Change按钮修改目录,又可以直接单击Next按钮。
图2.4Node.js安装步骤-
3
(4)单击Next按钮后出现图2.5所示的自定义安装界面,我们选择默认设置即可。
单击Next按钮后会出现一个准备安装界面,然后单击准备安装界面中的Install按钮。
图2.5Node.js安装步骤-
4
(5)开始安装的界面如图2.6所示。
安装需要等待1分钟左右,安装完成后出现完成界15 Node.js开发实战面,单击Finish按钮就完成了安装。
图2.6Node.js安装步骤-
5
(6)安装好后系统默认的环境变量PATH是C:\DocumentsandSettings\Administrator\ApplicationData\npm,也可以根据需要手动修改本地的安装目录,并将全局目录设置为与本地初始默认安装目录一致。
在完成安装Node.js的时候默认也安装了NPM。
NPM是Node.js的包管理工具,在后面的章节进行介绍。
要查看PATH变量,需要右击计算机,选择“属性”|“高级系统属性”选项,打开“系统属性”对话框。
然后单击“高级”|“环境变量”选项,在“用户变量”列表项中找到PATH变量,单击下方的“编辑”按钮就可以看到所有变量在这里的设置,主要是设置路径。
2.1.2测试Node.js开发环境 安装Node.js开发环境成功之后创建一个简单的APP来测试Node.js是否能够正常运行。
首先,为APP创建一个目录。
在D盘根目录下新建一个名为projects的目录,然后在其中创建一个名为NodeApp的子目录。
在NodeApp目录里面创建一个名为hello_world.js的js文件,然后在hello_world.js中写入如下代码。
【示例2-1】 varhttp=require('http');http.createServer(function(request,response){ response.writeHead(200,{'Content-Type':'text/plain'});response.end('HelloWorld\n');}).listen(3000);console.log('Serverrunningathttp://localhost:3000/'); 【代码说明】上面的代码是一个简单的Node.jsWeb服务举例。
它在电脑上创建一个HTTPWeb服务,并在网页上打印出HelloWorld字符串。
通过Windows开始菜单|Node.js|mand16 第2章部署Node.js开发环境 prompt来运行Node.js。
mandprompt是一个命令行界面,用来启动Node.js编译环境。
如果在开始菜单里找不到mandprompt,可以在搜索框中输入node,然后找到它并运行。
因为默认打开的路径不是我们创建项目的路径,所以这里我们可以通过cd命令来切换路径: D:\cdD:\projects\NodeApp #切换到D盘#切换到项目路径 接下来运行hello_world.js,简单地输入如下node命令: nodehello_world.js 如果一切都顺利,那么我们将会在mandprompt中看到: Serverrunningathttp://localhost:3000/ 如图2.7所示。
图2.7Node.js命令行运行界面 然后打开浏览器输入如下URL: http://localhost:3000/ 接着会在浏览器中看到“HelloWorld”,如图2.8所示。
这说明Node平台安装成功,并且能成功运行Node.js程序。
图2.8Helloworld程序运行结果 2.2Linux下部署Node.js开发环境 在Linux下安装Node.js有很多种方法,常见的方法有通过包管理器安装Node.js、源码安17 Node.js开发实战 装。
下面针对各种版本的Linux和安装方法进行介绍。
2.2.1通过源码安装Node.js 下面以Ubuntu14.04为例说明如何使用源码安装Node.js。

(1)首先,通过下面的命令安装版本工具。
apt-getinstallmakeg++libssl-devgit
(2)其次,新建一个目录,并使用wget命令下载Node.js源码。
cd/tmpwget/dist/v0.10.32/node-v0.10.32.tar.gztar-xvfnode-v0.10.32.tar.gzcdnode-v0.10.32 或者通过git直接从GitHub上复制。
gitclone/joyent/nodecdnode
(3)最后配置安装选项并进行编译安装,其中X代表服务器的CPU数量。
./configuremake-jXmakeinstall 安装成功后,可以使用node–v命令来检查Node.js的版本以及是否安装成功。
Node.js选择下载源码进行编译安装之前,要确保系统安装了Python2.6或2.7。
2.2.2通过包管理器安装Node.js 在Linux的不同版本下可以使用NPM进行Node.js安装。
下面仅列举几种常见的Linux发布版的方法。

1.ArchLinux在ArchLinux中Node.js和NPM包是全面支持的,可以通过一条指令进行安装: pacman-Snodejsnpm
2.基于Debian和Ubuntu的Linux发布版基于Debian和Ubuntu的Linux发布版本主要包括LinuxMint、LinuxMintDebianEdition(LMDE)和elementaryOS,可以通过Debian和Ubuntu的社区NodeSource来下载和安装,在GitHub上的链接地址是/nodesource/distributions。
需要注意的是,通过 18 第2章部署Node.js开发环境nodesource安装的版本可能并不是最新的。
安装Node.js4.x版本的方法如下: curl-sL/setup_4.x|sudo-Ebashsudoapt-getinstall-ynodejs 安装nodejsv6版本的方法如下: curl-sL/setup_6.x|sudo-Ebashsudoapt-getinstall-ynodejs
3.RedHatEnterpriseLinux/RHEL、CentOS和Fedora在RedHat、CentOS和Fedora上使用NPM安装Node.js的时候需要修改对应的地址,具体版本的链接可能略有不同。
要使用root用户登录,并执行下面的命令: 4.x版本 curl--silent--location/setup_4.x|bash- 6.x版本 curl--silent--location/setup_6.x|bash- 然后使用yum命令来安装Node.js: yum-yinstallnodejs 在Fedora18之后的版本,Node.js和NPM是默认支持的,只需要通过下面的一条命令就可以安装: sudoyuminstallnodejsnpm 2.3MacOSX下部署Node.js开发环境 在OSX上安装有3种方式,即使用源码安装、使用NPM包管理器安装和使用安装包安装。
本节主要介绍如何使用.dmg安装包和NPM包管理器进行安装。
2.3.1使用.dmg安装包进行安装 首先从Node.js官方网站上下载最新的OSX安装包,并按照安装向导进行安装,界面如图2.9所示。
19 Node.js开发实战 图2.9在OSX下安装Node.js 安装之后,/usr/local/bin在环境变量中已经定义,如果没有就在当前用户home目录下的.bash_profile或者.bashrc中进行添加。
2.3.2使用NPM包管理器安装 使用NMP包管理器安装Node.js时要从Node.js的官方网站上下载最新的MacintoshInstaller。
可以通过curl执行下面的命令来安装: curl"/dist/latest/node-${VERSION:-$(wget-qO/dist/latest/|sed-nE's|.*>node-(.*)\.pkg.*|\1|p')}.pkg">"$HOME/Downloads/node-latest.pkg"&&sudoinstaller-store-pkg"$HOME/Downloads/node-latest.pkg"-target"/" 或者使用MacPorts执行下面的代码: portinstallnodejs 2.4树莓派3下使用NVM安装Node.js 树莓派是一款卡片式的学习电脑,由英国剑桥大学在2012年3月首发。
本节主要介绍如何在树莓派3的官方操作系统Raspbian上使用NVM安装Node.js。

(1)首先下载和安装NVM(/creationix/nvm)。
NVM的全称是NodeVersionManager(Node.js版本管理器),它可以让我们在各个Node.js版本之间进行灵活的切换。
gitclone/creationix/nvm.git~/.nvm&&cd~/.nvm&&gitcheckoutv0.25.4
(2)然后使用nano命令编辑.bashrc和.profile,在文件末尾增加source~/.nvm/nvm.sh,并重新启动树莓派,具体命令如下: 20 第2章部署Node.js开发环境 sudonano~/.bashrcsudonano~/.profilesudoreboot
(3)启动完成后,在shell里面执行nvm命令。
当看到输出时,表示NVM安装成功。
nvm--version
(4)现在开始安装Node.js。
使用nvm命令安装Node.js稳定版,如v0.12.3。
$nvminstall0.12.3
(5)安装完成后,可以使用下列代码进行查看。
$nvmls 这时可以看到自己安装的所有Node.js版本。
2.5使用NPM进行Node包的安装 前面我们已经很多次使用NPM命令了,这其实使用的是Node.js默认的包管理器NPM。
当Node.js安装完成后,也默认将NPM安装完成。
安装包模块使得Node.js变成了一个更加强大的WebApp开发平台。
它能预先为Node.jsApp提供所需要的功能。
NPM官方网站号称有250000个不同的包可供开发者下载使用,网址为/。
例如,我们希望在Node.js上扩展一个MySQL接口,可以让我们在App中使用MySQL数据库。
只需要在mandprompt中输入如下命令即可: npminstallmysql 上面的命令会通过NPM下载和安装MySQLNode包。
当选择的包安装完成时会看到如图2.10所示的信息。
图2.10使用NPM在Windows下安装MySQL包 NPM的常用命令介绍如下:
(1)查看帮助 npmhelp或npmh 21 Node.js开发实战
(2)安装模块 npmintstall
(3)在全局环境中安装模块(-g:启用global模式) npminstall-g 更多的内容可参考。

(4)卸载模块 npmuninstall
(5)显示当前目录下安装的模块 npmlist Node.js安装成功后,系统会自动在PATH用户环境变量和系统环境中分别添加NPM和Node.js路径。
2.6开发工具介绍 为了更高效地编写Node.js代码,需要使用一个好的编辑器,这里推荐大家使用SublimeText。
SublimeText是一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件。
它主要有以下两大优点: 跨平台:SublimeText3为跨平台编辑器,可以在Windows、OSX和Linux下安装。
开发人员在开发和测试的时候切换系统是常有的事情,为了减少重复学习,使用一个跨平台的编辑器是很有必要的。
SublimeText3可以使你的开发工作在各个系统之间进行无缝切换。
可扩展:SublimeText3包含大量实用插件,可以通过安装自己领域的插件来成倍提高工作效率。
SublimeText有SublimeText2和SublimeText3两个版本。
它们的界面大致相同,但是SublimeText3的启动速度很快,而且支持更多的功能,所以本书以SublimeText3为例进行介绍。
2.6.1下载安装SublimeText3 SublimeText3beta版本已经非常稳定了,官方下载网址为/3。
需要注意的是SublimeText3是付费软件,虽然可以无限期地进行试用,但是如果长期使用建 22 第2章部署Node.js开发环境议还是购买正版的序列号激活。

(1)打开下载界面,如图2.11所示。
64位的Windows系统请选择“Windows64bit”安装包,即下载文件为“SublimeTextBuild3114x64Setup.exe”的安装程序。
“portableversion”下载下来为“SublimeTextBuild3114x64.zip”编辑器的包,解压后无须安装就能运行。
图2.11SublimeText3官方下载页面
(2)双击上一步下载下来的安装包,并按照提示进行安装,如图2.12所示。
图2.12SublimeText3安装过程
(3)安装成功后,双击桌面上的“SublimeText3”快捷图标,就可以打开SublimeText3程序了。
23 Node.js开发实战如果是OSX或者是Ubuntu就下载相应的安装包,并参照安装说明进行操作。
如果是在Linux下安装,就先使用uname–m命令查看操作系统的类型,再选择合适的安装包。
2.6.2SublimeText操作界面 SublimeText的界面如图2.13所示。
图2.13SublimeText3操作界面 界面中的各种操作选项说明如下:标签(Tab):分别显示每个打开的文件。
编辑区(EditingArea):主要编辑文本内容的区域,位于界面的中心位置。
侧栏(SideBar):包含当前打开的文件以及文件夹视图。
缩略图(Minimap):当前打开文件的缩略图。
命令板(CommandPalette):SublimeText的操作中心,使我们基本可以脱离鼠标和菜单栏进行操作。
控制台(Console):使用Ctrl+`快捷键可以调出该窗口。
它既是一个标准的PythonREPL,也可以直接对SublimeText进行配置。
状态栏(StatusBar):显示当前行号、当前语言和Tab格式等信息。
SublimeText3的相关操作文档和使用说明在/docs/3/上。
24 第2章部署Node.js开发环境 2.6.3安装SublimeText3插件 SublimeText3最强大的功能就是针对各种开发语言的编辑插件。
为了安装和管理这些插件,我们首先需要安装包管理器(packagecontrol),官方首页链接为https://packagecontrol.io。
通过Ctrl+`快捷键或者在菜单中选择View|ShowConsole来打开控制台,然后将下面的代码粘贴到控制台中运行。
importurllib.request,os,hashlib;h='2915d1851351e5ee549c20394736b442'+'8bc59f460fa1548d1514676163dafc88';pf='PackageControl.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));by=urllib.request.urlopen('http://packagecontrol.io/'+pf.replace('','%20')).read();dh=hashlib.sha256(by).hexdigest();print('Errorvalidatingdownload(got%sinsteadof%s),pleasetrymanualinstall'%(dh,h))ifdh!
=helseopen(os.path.join(ipp,pf),'wb').write(by) 这段代码将创建一个安装包的目录,并将包控制器PackageControl.sublime-package下载到这个目录中。
安装完毕后,需要重新启动SublimeText3。
2.6.4安装Node.js插件 在PackageControl首页的搜索框输入nodejs,就可以查找到所有和Node.js相关的包,如图2.14所示。
可以看到由tanepiper创建的Node.js包是当下最热门的Node.js插件,下载量为156000次。
图2.14PackageControl包搜索和下载页面 25 Node.js开发实战 打开Node.js包的链接,我们可以看到这个包的详细介绍和使用方法,并且可以查看到这个包每月的下载量。
在MaCOSX下的安装命令是: `gitclone/tanepiper/SublimeText-Node.js.git~/Library/Application\Support/Sublime\Text\3/Packages/Node.js` 在Windows下的安装命令是: `gitclone/tanepiper/SublimeText-Node.js"%APPDATA%\SublimeText3\Packages\Node.js"` 在Linux下的安装命令是: `gitclone/tanepiper/SublimeText-Node.js$HOME/.config/sublime-text-3/Packages/Node.js` 2.6.5SublimeText3快捷键 按照类型可以把快捷键分为编辑、选择、查找&替换、跳转、窗口、屏幕。
这里分别对常用的快捷键做一个简单介绍。

1.编辑Ctrl+Enter:在当前行下面新增一行,然后跳至该行。
Ctrl+Shift+Enter:在当前行上面增加一行并跳至该行。
Ctrl+←/→:进行逐词移动。
Ctrl+Shift+←/→:进行逐词选择。
Ctrl+↑/↓:移动当前显示区域。
Ctrl+Shift+↑/↓:移动当前行。

2.选择Ctrl+D:选择当前光标所在的词并高亮该词所有出现的位置,再次按Ctrl+D快捷键选择该词出现的下一个位置。
在多重选词的过程中,使用Ctrl+K快捷键进行跳过,使用Ctrl+U快捷键进行回退,使用Esc键退出多重编辑。
Ctrl+Shift+L:将当前选中区域打散。
Ctrl+J:把当前选中区域合并为一行。
Ctrl+M:在起始括号和结尾括号间切换。
Ctrl+Shift+M:快速选择括号间的内容。
Ctrl+Shift+J:快速选择同缩进的内容。
Ctrl+Shift+Space:快速选择当前作用域(Scope)的内容。

3.查找&替换 26 第2章部署Node.js开发环境 F3:跳至当前关键字下一个位置。
Shift+F3:跳到当前关键字上一个位置。
Alt+F3:选中当前关键字出现的所有位置。
Ctrl+F/H:进行标准查找/替换,之后: Alt+C:切换大小写敏感(Case-sensitive)模式。
Alt+W:切换整字匹配(Wholematching)模式。
Alt+R:切换正则匹配(Regexmatching)模式。
Ctrl+Shift+H:替换当前关键字。
Ctrl+Alt+Enter:替换所有关键字匹配。
Ctrl+Shift+F:多文件搜索&替换。

4.跳转Ctrl+P:跳转到指定文件,输入文件名后可以再输入以下内容。
@符号:跳转输入,如@symbol跳转到symbol符号所在的位置。
#关键字:跳转输入,如#keyword跳转到keyword所在的位置。
:行号:跳转输入,如:12跳转到文件的第12行。
Ctrl+R:跳转到指定符号。
Ctrl+G:跳转到指定行号。

5.窗口Ctrl+Shift+N:创建一个新窗口。
Ctrl+N:在当前窗口创建一个新标签。
Ctrl+W:关闭当前标签,当窗口内没有标签时会关闭该窗口。
Ctrl+Shift+T:恢复刚刚关闭的标签。

6.屏幕F11:切换至普通全屏。
Shift+F11:切换至无干扰全屏。
Alt+Shift+1Single:切换至独屏。
Alt+Shift+2Columns:2:切换至纵向二栏分屏。
Alt+Shift+3Columns:3:切换至纵向三栏分屏。
Alt+Shift+4Columns:4:切换至纵向四栏分屏。
Alt+Shift+8Rows:2:切换至横向二栏分屏。
Alt+Shift+9Rows:3:切换至横向三栏分屏。
Alt+Shift+5Grid:切换至四格式分屏。
27 Node.js开发实战 2.7温故知新 学完本章后,读者需要回答:
1.Windows10下安装Node.js有哪几种方式?
2.如何使用NPM下载特定的Node.js开发包?
3.Node.js在Windows中的默认安装路径是什么?
4.在SublimeText3中使用什么快捷键可以新建一个文档?
5.Node.js支持哪些操作系统? 28

标签: #培训机构 #后缀名 #cs1.6怎么联机 #大众 #烟雾 #文件 #文件 #文件