node的模块化

node的模块化

一、简述

模块化就是对代码进行模块化的拆分与组合

例如:

  • 使用什么样的语法格式来引入模块
  • 在模块中使用什么样的语法格式来向外暴露模块
二、Node.js中模块的分类

node中根据模块来源不同,将模块分为3大类:

  • 内置模块(由node官方提供,例如fs、path、http等)
  • 自定义模块(自己创建的js文件,都是自定义模块)
  • 第三方模块(第三方开发的模块,使用前需要先下载)
三、加载模块

使用require()方法,可以加载需要的内置模块、自定义模块、第三方模块进行使用。

内置模块与第三方模块直接导入,而自定义模块是按照路径导入的

// 1、加载内置 fs 模块
const fs = require('fs');

// 2、加载自定义模块
const myModel = require('./myModel.js);

// 3、加载第三方模块
const moment = require('moment');

注意:使用require()方法加载其他模块时,会执行被加载模块中的代码。

四、node中的模块作用域

模块作用域和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,。这种模块级别的访问限制叫做模块作用域

com.js

// 在模块作用域中定义变量/函数
const userName = 'bob';
const sayHello = () => {
  console.log('你好!')
}

index.js

const com = require('./com.js');
console.log(com);
// 输出 {} 空对象
// index.js中无法访问到com.js模块中私有成员

模块作用域能够很好的防止全局变量污染的问题。

五、向外共享模块作用域中的成员

一般逻辑是通过一个方法抛出要共享的数据,然后其他模块直接导入

module.exports对象
  • 在自定义模块中,可以使用module.exprots对象将模块内的数据抛出,达到共享,供其他模块使用。
  • 外界使用require()方法导入自定义模块时,得到的就是module.exports所指向的对象。
  • 使用require()方法导入模块时,导入的结果,永远以module.exports指向的对象为主。

com.js

// 1、向module.exports对象上挂载要抛出的属性或者方法
module.exports.userName = 'jim';
module.exports.sayhello = () => {
  console.log('hello');
};

// 2、让module.exports指向一个全新对象(重新赋值,那么导入就会指向新值)
module.exports = {
  otherName: 'bob',
  sayHi(){
    console.log('hi');
  }
}

index.js

const com require('./com.js');
console.log(com);
// 新值
exports对象

由于module.exports 单词写起来复杂,为了简化代码,node提供了exports对象。默认情况下modele.exports和exports指向同一个对象。最终的共享结果,还是以module.exports指向的对象为准。

com.js 还可以这么写

// 1、exports对象上挂载要抛出的属性或者方法
exports.userName = 'jim';
exports.sayhello = () => {
  console.log('hello');
};

注意:require() 模块时,得到的永远是module.exports指向的对象,为了防止混乱,同一个模块不要同时使用exports和module.exports。

Node.js中的模块化规范

node.js遵循来CommonJs模块化规范,CommonJs规定了模块的特性和各模块之间如何相互依赖。

CommonJs规定

  • 每个模块内部,module变量代表当前模块
  • module变量是一个对象,它的exports属性(即module.exports)是对外的接口
  • 加载某个模块,其实是加载该模块的 module,exports属性。require()方法用于加载模块。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值