《Node.js》模块

前言

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


作者:朱会震


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值