03-CommonJS模块规范

简介:本笔记记录node.js采用的CommonJS的模块规范。

  • common.js规范认识

    • node应用由模块组成,采用的CommonJS的模块规范。
    • 其中每个node.js文件就是一个模块,拥有自己独立的作用域,变量,以及方法等,对其它的模块都不可见。
    • CommonJS规范规定,每个模块内部,module变量代表当前模块。
    • 这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。
    • 加载某个模块,其实是加载该模块的module.exports属性,其中通过require方法加载模块。
  • common.js规范为两种模块

    • 系统自带的模块
      • fs文件模块,http服务器模块
    • 第三方模块
      • 通过cnpm安装的模块,比如jquery,vuex,express等模块,之后通过require方法引入模块。
      • 自己写的自定义模块
  • node模块的module对象理解

    • module.exports属性
      • module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
      • module.exports使用格式:module.exports={[开放的变量,以及方法等]}。
    • exports变量
      • node为每一个模块提供了一个exports变量(可以说是一个对象),指向
        module.exports。这相当于每个模块中都有一句这样的命令 var exports = module.exports;
      • exports使用格式:exports.[属性名]=[开放的变量,以及方法等]。
    • 注意: 如果这两者不好区分,那就放弃 exports,只用 module.exports 就好。
  • node模块在其它文件中的引入

    • 通过require命令引入模块

    • 基本用法require命令用于加载模块文件,相当于读入并执行一个js文件,然后返回该模块的exports对象,没有发现指定模块,则就会报错。

  • node模块中打印应用

// 1.模块中console的应用,文件名04-model_use.js
// node模块中不存在alert的API接口,因此无法使用alert
console.log("这是node模块中console应用!");

 文件名03-conmmon.js引入04-model_use.js的模块
require('./04-model_use');

console应用

  • node模块中变量的应用
// 2.node模块中变量的应用,文件名04-model_use.js
let varia = "这是node模块中变量的应用!";
exports.NewVaria = varia;

//  文件名03-conmmon.js引入04-model_use.js的模块中的变量
let read = require('./04-model_use');
console.log(read); //得到的read变量是一个方法,需要进行解构才能得到值
// 解构则是将read替换为{NewVaria}

变量应用

  • node模块中函数的应用
// 3.node模块中方法的应用
// 通过rest参数接受数字保存为数组,之后对数组进行reduce方法累加
function sum( ...rest ){
   return [...rest].reduce( (a,b) => a+b );
}
exports.sum = sum;

//  文件名03-conmmon.js引入04-model_use.js的模块中的方法
let fun = require('./04-model_use');
console.log( fun.sum(10,20,30) ); // 输出求和结果60

求和函数应用

  • node模块的缓存功能
    • node模块如果在某地方引入模块后,在该地方给引入的模块新添加属性,那么之后第二次引入则会产生缓存,即会出现新添加的属性。
    • 为了解决模块缓存的问题,需要在模块中添加delete去删除模块缓存。
// 在03-model_cache.js模块文件中
let num1 = 123;
let num2 = 456;

module.exports = {
    num1,num2
};

// 删除缓存的值,下次被引入的时候,不会产生缓存
delete require.cache[module.filename];

//  在04-require03model.js模块文件中
// 引入模块03-model_cache.js
let data = require('./03-model_cache');
console.log(data); //data结果{num1: 123, num2: 456}
// 如果给data添加新的属性后
data.num3 = 789;
// 添加后,打印data,会发现第一次引入的模块03-model_cache.js会出现num3的属性缓存
console.log(data); //data结果{num1: 123, num2: 456, num3: 789}
// 在模块中添加删除缓存后,第二次引入的模块03-model_cache.js则不会会出现num3的属性缓存
let data1 = require('./03-model_cache');
console.log(data1); //data1的结果:{num1: 123, num2: 456}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AMD(Asynchronous Module Definition)和 CMD(Common Module Definition)是两种常见的JavaScript模块规范,而CommonJS则是另一种常见的JavaScript模块规范。 AMD和CMD都是异步加载JavaScript模块规范,可以在页面加载完毕后再异步加载JavaScript模块。这样可以加快页面的加载速度,提高用户体验。 AMD规范是由RequireJS推广和实现的,它的特点是定义模块时采用的是函数式的语法。AMD模块通过define()函数定义,模块的依赖通过数组参数来定义: ``` //定义模块 define(['module1', 'module2'], function(module1, module2) { //模块代码 }); ``` CMD规范是由SeaJS推广和实现的,它的特点是定义模块时采用的是对象式的语法。CMD模块通过define()函数定义,模块的依赖通过函数参数来定义: ``` //定义模块 define(function(require, exports, module) { //引入依赖模块 var module1 = require('module1'); var module2 = require('module2'); //模块代码 }); ``` CommonJS规范则是由Node.js推广和实现的,它的特点是采用同步加载JavaScript模块的方式。CommonJS模块通过module.exports和require()函数来定义和引入模块: ``` //定义模块 module.exports = { //模块代码 }; //引入模块 var module1 = require('module1'); ``` 总的来说,AMD和CMD主要用于浏览器端的JavaScript模块化开发,而CommonJS主要用于服务器端的JavaScript模块化开发。在实际开发中,可以根据自己的需求选择合适的模块规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐沐茶壶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值