参考链接:
- Node.js中文文档; http://nodejs.cn/api/
1.1、模块化。 module
Node.js中是以模块化进行开发的,原生JavaScript中并没有模块系统,标准库也很少,类似NPM的包管理系统也很缺乏,这就会在造成各种空间污染、结构混乱,需要花费大量的时间去做容错。Node.js遵循CommonJS规范编写很好的解决了上述问题。
CommonJS定义的模块主要分为:模块引用(require) 模块定义(exports) 模块标识(module)三部分。
require根据外部模块ID,返回该模块输出的API;
每个模块中还有一个自由变量exports,它是一个对象,模块对外输出的API就绑定在这个对象上。而且exports是模块对外输出API的唯一途径;
每个模块中必须有一个自由变量module,它是对象。这个对象有一个id属性,表示该模块的id,同时应该是只读属性。module对象可以有一个uri属性,表示这个模块被加载的来源。
如果你的JS代码是根据CommonJS API编写的,那么,你就可以在与CommonJS兼容的系统上,用JavaScript做下面这些事情:
编写服务端应用;
编写命令行工具;
编写基于GUI的桌面应用;
混合应用程序;
1.2 Node.js中CommonJS规范的体现
模块引用: 统一通过require引入,并返回一个对象,这个对象上挂载着这个模块中的所有变量、函数...那么跨文件获取时,就不需要通过global对象,封闭了命名空间。
模块定义: 一个js文件就是一个模块 ,将文件中的变量和函数挂载到exports对象上,作为其属性即可定义导出运用。
模块标识: 命名统一采用驼峰命名,相对路径以.、..开头,也可以是绝对路径,引入的文件可以带.js后缀也可以不带。
1.3 Module中到底有哪些东西?
我们在终端运行下面一段代码看看:
var http = require('http');
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/plain'});
res.end('Hello World,\n sssssss');
}).listen(8080,'127.0.0.1');
console.log('Server running at http://127.0.0.1:8080');
module.exports = function printMessage(){
console.log('module是个什么东西!?')
}
console.log(module);
运行结果:
通过上图,我们进一步了解到Module其实是Node.js内部的一个构造函数,所有的模块都是Module的实例;因此,在每个模块内部都有一个module对象,代表着当前的模块。其内部的属性主要包括以下几点:
module.id 模块文件名 (唯一性)
module.exports 模块对外输出的内容
module.parent 返回一个对象,表示调用该模块的模块
module.filename 绝对路径下的模块文件名
module.loaded 模块是否已经完成加载(true 或者 false)
module.children 返回一个数组,表示当前模块中用到的其他模块
module.paths 返回一个数组,表示该模块涉及的所有路径
2.1 NPM的常用命令
NPM是Node.js默认的模块管理器,是一个命令行下的软件,用来安装和管理node模块,是统一的模块登记和管理系统。NPM 是开源界最大的模块生态社区。
npm init 初始化一个package.json文件。
npm install 包名 安装一个包
npm install --save-dev 包名 安装包安装到本项目里面然后把包依赖添加到package.json文件中
npm uninstall 包名 卸载当前目录下某个包
npm uninstall 包名 --g 卸载全局安装路径下的某个包
npm update 包名 更新当前目录下的某个包
npm update 包名 -g 更新全局安装路径下的某个包
npm docs 包名 查看包的文档
npm root 包名 -g 查看全局包安装路径
npm list 查看当前目录下安装的所有包
npm config set prefix "路径" 修改全局包安装路径