Download: 构建千万级高可用企业级Node.js应用
我们都知道JavaScript先天就缺乏一种功能:模块。浏览器环境的js模块划分只能通过src引入使用。然而,我们是辛运的的,我们在身在这个前端高速发展的时代*(当然了,这也是一种压力,一觉醒来又有新东西诞生了)*。高速发展下社区总结出了CommonJS这算得上是最为重要的里程碑。CommonJS制定了解决这些问题的一些规范,而Node.js就是这些规范的一种实现。Node.js自身实现了require方法作为其引入模块的方法,同时NPM也是基于CommonJS定义的包规范
Node模块
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。commonJS这套规范的出现使得用户不必再考虑变量污染,命名空间这些问题了。
小示例
// add.jsconst add = (a, b)=>{ return a+b}=============================// index.jsconst add = require(‘./add’)let result = add(1, 2)console.log(result)
1.模块引用
require()这个方法存在接受一个模块标识,以此引入模块
const fs = require(‘fs’)
Node中引入模块要经历一下三步:
路径分析
文件定位
编译执行
Node优先从缓存中加载模块。Node的模块可分为两类:
Node提供的核心模块
用户编写的文件模块
Node核心模块加载速度仅次于缓存中加载,然后路径形式的模=模块次之,最慢的是自定义模块。
2.模块定义
在模块中,上下文提供了exports来到处模块的方法或者变量。它是唯一出口
exports.add = function(){ // TODO}
在模块中还存在一个module对象,它代表模块自身,exports是它的属性。为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令
var exports = module.exports
async模块是为了解决嵌套金字塔,和异步流程控制而生.常用的方法介绍
npm 安装好async模块,然后引入就可以使用 var async = require(‘async’);
- series(tasks,[callback])
多个函数从上到下依次执行,相互之间没有数据交互
var task1 =function(callback){
console.log(“task1”);
callback(null,“task1”)
}
var task2 =function(callback){
console.log(“task2”);
callback(null,“task2”)
}
var task3 =function(callback){
console.log(“task3”);
callback(null,“task3”)
}
async.series([task1,task2,task3],function(err,result){
console.log(“series”);
if (err) {
console.log(err);
}
console.log(result);
})
var task1 =function(callback){
console.log(“task1”);
callback(null,“task1”)
}
var task2 =function(callback){
console.log(“task2”);
callback(“err”,“task2”)
}
var task3 =function(callback){
console.log(“task3”);
callback(null,“task3”)
}
async.series([task1,task2,task3],function(err,result){
console.log(“series”);
if (err) {
console.log(err);
}
console.log(result);