node.js简介及安装
node.js是围绕着javascript开发的,js是脚本语言,脚本语言需要解析器才可以运行。对于写在html中的js,浏览器就充当了脚本的解析器,而对于要独立运行的js脚本来说,node.js就是一个解析器了。
解析器其实就是一个运行环境,可以让js在运行环境中进行各种变量赋值,计算等行为,并且还提供了各种内置对象和方法来让js进行更多的操作。例如在浏览器中运行的js主要就是操作DOM,浏览器这个运行环境提供了document之类的内置对象。而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应的提供了fs、http等内置对象。
node.js安装
node.js下载地址
Windows系统下,选择和系统版本匹配的.msi后缀的安装文件。Mac OS X系统下,选择.pkg后缀的安装文件。
如何运行
打开终端,输入node,进入命令交互模式,此时可以输入语句执行并显示
$ node
> console.log('Hello World!');
Hello World!
undefined
在这个地方运行console.log()输出的时候,会发现除了会正常输出Hello World以外,还会紧接着输出一条undefined。
刚开始不明白undefined是怎么打印出来的,后来发现undefined是console.log()的返回值,而非正常打印的结果,所以显示出来的undefined是以百分之五十透明度显示的。
如果要运行一大段代码的话,可以先写一个JS文件再运行。例如有以下hello.js。
function hello() {
console.log('Hello World!');
}
hello();
写好后在终端下键入node hello.js运行,结果如下:
$ node hello.js
Hello World!
模块
在编写比较大的程序中,一般都会将代码模块化。在node.js中,会将代码拆分成不同的js,而每一个js文件,就是一个模块,文件的路径就是模块名。
在编写每个模块时,都有 require
、exports
、module
三个预先定义好的变量可供使用。
require
require
函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。
模块名可使用相对路径(以./开头),或者是绝对路径(以/或C:之类的盘符开头)。另外,模块名中的.js扩展名可以省略。
var header = require("./header")
var header1 = require("./header.js")
同时,可以利用require来加载和使用一个JSON文件。
var data = require("./data.json")
exports
exports
对象是当前模块的导出对象,用于导出模块公有方法和属性。别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象。以下例子中导出了一个公有方法。
exports.hello = function () {
console.log('Hello World!');
};
module
通过module
对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。例如模块导出对象默认是一个普通对象,如果想改成一个函数的话,可以使用以下方式。
module.exports = function () {
console.log('Hello World!');
};
模块初始化
一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象。之后,缓存起来的导出对象被重复利用。