您的位置:首页 > Web前端 > Node.js

《Node.js》模块

2017-02-27 14:06 169 查看

前言

熟悉JavaScript语言的开发者都知道,JavaScript语言是没有名字空间这个概念的,所有被加载到网页的JavaScript代码都属于同一个名字空间(这个名字空间可以理解为window对象)。这就导致脚本之间很容易引起命名冲突,以及因此引起的一些安全问题,同时也给跟踪调试代码带来了很大的麻烦。

CommonJS

鉴于JavaScript语言这个“天生 ”的缺陷,CommonJS应运而生。CommonJS制定了一个标准:每个模块都拥有一个独立的上下文,将该模块和其他模块隔离开来,从而达到模块之间不再相互干扰的目的。而Node.js就是实现了CommonJS规定的这些标准。有关CommonJS的更多说明,请参考其官方网站:http://www.commonjs.org/

编写模块

基于CommonJS规范编写代码,从某种意义上也可以理解为“面向模块编程”,每一个功能、每一个组件,都是一个模块。在Node中,文件和模块是一一对应的,每一个文件对应一个模块,且模块只对外暴露开发者指定的内容。来看下边这个例子:
function add(a, b) {
return a + b;
}
function sub(a, b) {
return a - b;
}
module.exports = {
add: add,
sub: sub
};
代码中的module是一个变量,表示模块自身。module.exports表示当前模块所导出的对象,它可以是任意类型的对象。

加载模块

在Node中既可以用文件路径也可以用文件名称来引用模块,如果不是核心模块,使用名称来引用的模块最终也会被映射为一个文件路径。核心模块是指Node自身提供的一些功能,这些模块会在Node进程启动时预先载入到内存。其它模块包括使用npm安装的第三方模块,也包括当前项目中的模块。在Node中是通过require函数引用模块的:var module = require('./modules/filename.js');上述代码中的require函数会返回一个对象,该对象就是通过module.exports暴露出来的那个对象。

模块缓存

Node中的模块在首次加载时会被缓存起来,所以当一个项目中多次引用同一个模块的时候,始终拿到的都是第一次加载的模块内容,那么模块内的代码也就只被执行一次。

作者:朱会震
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Node.js