Node.js-CommonJS规范

本文详细介绍了CommonJS规范,包括模块的自执行函数、exports和module.exports的区别以及如何暴露和引入模块。重点讲解了exports和module.exports的使用场景,强调了它们在导出多个成员时的差异。此外,还阐述了require函数的作用,主模块的概念以及模块初始化的过程。
摘要由CSDN通过智能技术生成

CommonJS的介绍

CommonJS:是Node.js使用的模块化规范。也就是说,Node.js就是基于CommonJS这种模块化规范来编写的。

在 CommonJS 中,每个文件都可以当作一个模块:

  • 在服务器端:模块的加载是运行时同步加载的。

  • 在浏览器端: 模块需要提前编译打包处理。首先,既然同步的,很容易引起阻塞;其次,浏览器不认识require语法,因此,需要提前编译打包。

验证模块内变量都是局部变量

在node中有一个全局对象 global,它的作用和网页中window类似

  • 在全局中创建的变量都会作为global的属性保存

  • 在全局中创建的函数都会作为global的方法保存

var a = 10;
//若定义的a为全局变量就找得到,反之不是就输出undeined
console.log(global.a);//undeined  
//所以在node里面定义的都是局部变量

模块的自执行函数

当node在执行模块中的代码时,所有代码都会包含在以下函数内(默认是看不到的)

function (exports, require, module, __filename, __dirname) {
  //模块中的所有代码,所以模块中定义的都是局部变量而非全局变量
}

实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参

  • exports

    • 该对象用来将变量或函数暴露到外部
  • require

    • 函数,用来引入外部的模块
  • module

    • module代表的是当前模块本身

    • exports就是module的属性

      • 既可以使用 exports 导出,也可以使用module.exports导出
  • __filename

    • W:\桌面\学习\前端\Node.js基础\demo.js

    • 当前模块的完整路径

  • __dirname

    • W:\桌面\学习\前端\Node.js基础

    • 当前模块所在文件夹的完整路径

模块的暴露和引入

exports

exports对象用来导出当前模块的公共方法或属性。别的模块通过 require 函数调用当前模块时,得到的就是当前模块的 exports 对象。

// 相当于是:给 exports 对象添加属性
exports.xxx = value//这个 value 可以是任意的数据类型。

举例:

 *  定义一个模块 math
 *      在该模块中提供两个方法
 *          add(a,b);   //求两数之和
 *          cheng(a,b)  //求两数之积
 */
//向外暴露属性
exports.y = "我是y";
//向外暴露方法
const add = function (a, b) {
  return a + b;
};
exports.add = add;
//简写
exports.cheng = function (a, b) {
  return a * b;
};


module.exports

module.exports用来导出一个默认对象,没有指定对象名。

// 方式一:导出整个 exports 对象
module.exports = value;

// 方式二:给 exports 对象添加属性
module.exports.xxx = value;
//这个 value 可以是任意的数据类型。

举例:

// 方式1
module.exports = {
    name: '我是 module1',
    foo(){
        console.log(this.name);
    }
}

// 我们不能再继续写 module.exports = value2。因为重新赋值,会把 exports 对象 之前的赋值覆盖掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值