Node 应用由模块组成,采用 CommonJS 模块规范。
每个模块有自己的变量和方法,需要一种方式去暴露和引用一个模块的变量和方法。require方法用于加载模块,module.exports和exports用于暴露方法。
module.exports和exports的区别:(1)module.exports 初始值为一个空对象 {};(2)exports 是指向的 module.exports 的引用;(3)require() 返回的是 module.exports 而不是 exports
写法:exports = module.exports = somethings,即 module.exports 指向新的对象时,exports 断开了与 module.exports 的引用,那么通过 exports = module.exports 让 exports 重新指向 module.exports 即可。
CommonJS模块的特点:(1)所有代码都运行在模块作用域,不会污染全局作用域。(2)模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。(3)模块加载的顺序,按照其在代码中出现的顺序。
AMD规范与CommonJS的区别:CommonJS规范加载模块是同步的,AMD规范则是非同步加载模块,允许指定回调函数。由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。
CommonJS模块的加载机制是,输入的是被输出的值的拷贝。也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。
网友评论