node--module模块node
摘要:json
主要是从module的几个特性讲解缓存
1. 稳定性 模块化
export.a = function() {}; export.b = function() {};
这里两个函数都是被添加到exports根部的对象上,模块内本地变量是私有的。函数
2. 访问主模块ui
require.main === module
若是直接用node执行某个文件,那这个文件就是主模块,默认被赋值给require.main。spa
3. 缓存code
模块在第一次加载后就会被缓存,屡次调用不会致使模块的代码屡次执行,能够但会'部分完成'的对象,从而容许加载依赖的模块,因此不会致使循环依赖。对象
4. 循环blog
当循环调用require()时,一个模块可能在未完成执行时被返回。
执行顺序: main.js b.js a.js b.js ->done a.js ->done main.js -> done
5. 目录做为模块
require()寻找路径先经过寻找package.json中的main模块,在根据main模块的路径,寻找当前所在的路径位置
6. 模块包装器(划重点)
在执行代码前,node.js会使用下面这个函数把文件包装起来
(function(exports, require, module, __filename, __dirname) { //.......真正要执行的部分 })
包装的缘由
(1)保证定义的变量的模块化
(2)提供一些看似全局,但其实是模块特定的变量
7. 模块的做用域
(1) __dirname: 当前木块的目录
(2)__filename: 当前木块的文件名(局对路径)
(3)exports: exports虽然是module.exports的简写,可是一旦 exports被赋值,module.exports就没法改变这个值了
(4)module: 在每一个模块中,module
的自由变量是一个指向表示当前模块的对象的引用。 为了方便,module.exports
也能够经过全局模块的 exports
对象访问。 module
实际上不是全局的,而是每一个模块本地的。