Node.js开发指南之一:基本概念与开发环境的配置

1 Node.js简介

Node.js是一个让Javascript运行为服务端的开发平台。其采用V8引擎来执行JS脚本,同时提供了基于COMMONJS规范的JS接口,使得代码开发的移植性较好。

Node下的编程采用事件的思想,将磁盘、网络、用户请求、数据库请求等进行异步处理,使得单个线程的执行效率更高。当然缺点是异步执行对于程序行为的理解不太方便。

2 Node的安装与配置

Node在各个平台上都有相关的版本,可以在官网上下载并按说明进行安装。

Node安装后,默认提供了一个npm的模块用于管理三方的扩展包,类似于PHP的pear。其基本命令与yum类似,如npm install package。

Node的安装包有两种安装模式:全局模块与本地模式。前者会将三方扩展包安装在OS的系统PATH中,使得在命令行环境中可以找到相关的工具。后者将三方包安装在命令执行的目录下的node_modules下,以做为某个项目的依赖项安装,而不导出到全局。

3 Node快速入门

3.1 运行Node

运行Node应用的基本方法为,首先写一个Js文件,然后用Node来执行。

Node也支持直接对作为其参数的JS代码进行执行,如node -e 'console.log('Hello world)'

Node类似于Pyhon,提供了REPL模式,在命令行下直接运行Node即可进行,在REPL模式下,可以逐行的进行输入和执行。

通过npm可以安装一个叫supervisor的工具到全局,用这个工具替代Node去执行JS脚本,可以在我们修改JS文件后自动重启Node实例。

Node自带了HTTP模块,因此Node可以完成类似PHP的功能,但却不需要前端WEB的支持。下面示例演示一个简单的WEB SERVER。

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(80);

console.log('Server running at http://127.0.0.1:80/');

3.2 模块与包

在Node中模块与文件相对应,包的概念更大一些可以是一个目录,目录下由多个模块组成。Node提供了required函数来加载模块和包。

为了更好的理解模块和包,最好是自己创建一个模块和包。

3.2.1 创建模块

创建模块很简单,只需要新建一个js文件,实现相应功能,最后把需要导出的接口放到exports对象中。示例如下:

//module hello.js

var something;

exports.sayHello = function()
{
  console.log('hello');
}

//var h = require('./hello.js')
//h.sayHell();
exports为模块的导出接口对象,Node的模块加载函数require()会分析所加载模块的exports对象,并将其导出。

在当前模块下,module对象引用当前模块,因此module.exports与exports指向同一对象的引用。在某些情况下,为了较快捷的取到导出对象,也可以直接覆盖exports对象为要导出的对象。如下示例:

//file hello.js
var hello = function()
{
  console.log('hello');
};

module.exports=hello;

//require('hello.js')();


3.2.2 模块寻找与加载机制

Node的require函数会将加载的模块按文件名存放在require.cache中,因此模块虽然会被加载多次,但只会返回同一个模块实例。cache信息可以在node debug下进行repl下用console功能打印出来。

Node的模块分为核心模块与文件模块。

核心模块为Node API中声明的模块,其在加载时具有最高优先级,即如果有模块与其重名,则只加载核心模块。

文件模块为存储为单独文件或目录的模块。文件模块的加载分为两种方式,一种包含绝对路径或相对路径的方式,此时Node会按路径寻找并进行加载,若未能找到则抛出异常。在模块不是核心模块,也不是以路径方式加载的情况下,Node会搜索当前目录下的node_modules目录去寻找相应的模块,若无果,则向上级目录下的node_modules下寻找,重复此过程一直到根目录。

3.2.3 创建包

Node中的包是一个目录,CommonJS规范中对于包有比较严格的要求,如package.json的定义,目录中包含bin/ lib/ doc/ test/等。Node只要求根目录下存在package.json文件即可。最简单的包只是一个目录下创建index.js,在index.js中实现功能即可。Node在加载包时,会根据根目录下有package.json,搜索文件中main对应的值作为模块入口,若main字段不存在,或对应文件未找到,则尝试寻找index.js作为入口。

创建好了包之后,在外部即可require目录名来包含相应的包。

3.2.4 对外发布包

如果想将自己的包发布到Internet上,则可以借助于npm工具:

npm init 通过交互式的方式来生成package.json

npm adduser  通过交互的方式来在node repo网站生成用户

npm publish 可以将包发布出去,若需要,通过更新package.json中的版本号并重新publish即可。

npm unpublish 可以将包撤销

3.3 调试

3.3.1 node debug 

node debug script.js 可以在命令行下对script.js进行调试

其支持下列命令:

断点命令:sb(line)  sb('func') cb() 

步进命令:next cont step out

信息查看:bt list(n)  watch/unwatch(expr)  repl

执行控制:run restart kill 

3.3.2 打开远程调试

node --debug-brk = 8080 script  打开调度服务器基于8080端口,并暂停执行等待客户端连接 

在远程即可用node debug  ip:8080


3.3.2 辅助工具

三方的工具可以用来更友好的连接到debug server上,比较友好的如node-inspector,通过npm安装后启动并在浏览器中定位到

http://ip:port/debug?port=debug-port即可


参考文献:

1 《Node.js开发指南》

2 Node.js API :http://nodejs.org/api/

你可能感兴趣的:(Node.js开发指南之一:基本概念与开发环境的配置)