在讲模块之前,先区分两个词:
模块我们叫做module,指的是一系列有关系的js程序的集合.
后面我们学习MVC中的M指的是model,模型.模型是实现最基本的算法的程序单位.
内置模块:
NodeJS中内置了很多模块,可以直接用require来进行引用.国际惯例是,你接受的名字最好和模块一样
var http=require(“http”);
var qs=require(“querystring”);
内置模块的引用使用require函数,require表示引用的意思.
引用是无条件的,不需要提前引入什么.
引用是无路径的,在任何的目录下,都是通过require(“http”)来引用内置http模块,而不是require("…/http").
内置模块是NodeJS天生就有的,nodejs手册就是按照模块来区分的.
我们后面还会学习一些模块,注意记忆里面常用的方法和属性,比如:
url.parse();
querystring.parse();
path.extname();
自定义模块
每一个js文件都是一个模块,Node.js使用CMD(通用模块定义)规范,后面我们将知道webpack,sea.js也是用的是CMD规范,而Angular,require.js等等它们使用的是AMD(异步模块自定义).
自定义模块中,require谁就会运行谁.
自定义模=模块demo:
server.js:
require("./index.js");
console.log(“我是server.js文件里的语句”)
index.js
var fs=require(“fs”);
console.log(“我是index.js文件里面的语句”);
fs.readFile("./nodelearn.txt",function (err,data) {
console.log(“我是index.js回调函数里面的语句”);
});
运行结果如下:
结论:require的文件中如果有异步语句,此时nodejs仍然不会等他结束,会返回执行主文件中的程序.如果文件读取完毕,执行回调函数.
循环引用:
如果A引用B,B引用A,那么会发生什么?
答案:nodejs很智能,如果B重新引用了A,此时如同没有引用一样,会帮你自动抑制.