nodeJS学习笔记(1) --- 模块系统

2016-08-01  本文已影响40人  Jocelyn_Long

nodeJs模块系统

nodeJs提供一个简单的模块系统。
模块是nodeJs应用程序的基本组成部分, 模块与文件一一对应(一个文件即一个模块)。
下面举一个学校的例子(学校里有班级,班级有老师和学生);

新建一个student.js,代码如下:

    console.log('Add Student:' + student);
}
exports.add = add ```

teacher.js,代码如下:
```function add(teacher) {
    console.log('Add Teacher:' + teacher);
}
exports.add = add;```

class.js,代码如下:
```var student = require('./student');
var teacher = require('./teacher');
function add(teacherName, students) {
    teacher.add(teacherName);
    students.forEach(function(item, index){
        student.add(item)
    })
 }
 // 实例
 exports.add = add
// 支持存在的东西 这种方式存在会忽视上一中方式的属性和方法
//module.exports = add```
index.js,代码如下:
```var klass = require('./class')
//因为class为js内置对象,不能自己定义一个对象取名class,所以此处用klass
exports.add = function(klasses) {
    klasses.forEach(function(item, index){
        var _klass = item;
        var teacherName = item.teacherName;
        var students = item.students;
    })
}```
这就是一个简约版的小学校啦。主要通过export暴露模块的接口,然后通过require来请求模块。

##服务端的模块
http,fs这种原生的模块又是在哪呢?
NodeJs中存在四类模块(原生模块和三种文件模块),尽管require方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同.

Node.js 的 require方法中的文件查找策略如下:
```flow
st=>start: 开始require
queryFileModule=>operation: 查询文件模块
loadFileModule=>operation: 根据扩展名加载文件模块
cacheFileModule=>operation: 缓存文件模块
loadNativeModule=>operation: 加载原生模块
cacheNativeModule=>operation: 缓存原生模块
nativeModuleCache=>condition: 是否在原生模块缓存区?
nativeModule=>condition: 是否原生模块?
fileCache=>condition: 是否在文件缓存区中?
e=>end: 返回export
st-> fileCache
fileCache(yes)->e
fileCache(no)->nativeModule
nativeModule(yes)->loadNativeModule->cacheNativeModule->e
nativeModule(no)->queryFileModule->loadFileModule->cacheFileModule->e

ps:流程图还没找到解决方案- -有知道的小伙伴可以教我呀- -

上一篇 下一篇

猜你喜欢

热点阅读