node.js-模块化

本文详细阐述了模块化编程在Node.js中的应用,包括模块划分、代码复用与维护、Node.js模块分类(内置、自定义和第三方)、require()方法的使用、模块作用域、module对象和module.exports的用法,以及CommonJS规范。同时强调了模块共享时exports和module.exports的区别。
摘要由CSDN通过智能技术生成

概念

模块化是指解决一个复杂问题时,自上向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元

  1. 现实中的模块化 小霸王游戏机

  2. 编程领域中的模块化 编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成 ## 独立并相互依赖的多个小模块

把代码进行模块化的拆分的好处

  1. 提高了代码的复用性

  2. 提高了代码的可维护性

  3. 可以实现按需加载

模块化的规范 模块化时遵循的规则

Node.js 模块分类

  1. 内置模块(内置模块是由Node.js官方提供的,例如fs path http 等)

  2. 自定义模块(用户创建的每个.js文件都是自定义模块)

  3. 第三方模块(由第三方开发出来的模块 使用前需要下载)

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

<!-- 1.加载内置模块 -->
const fs = require('fs')

<!-- 2.加载自定义模块 -->
const custom = require('./custom.js')

<!-- 3.加载第第三方模块 -->

const moment = require('moment')

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

// 注意 在使用require 加载用户自定义模块期间
// 可以省略 .js 的后缀名

const m1 = require('./01.m1')

Node.js中的模块作用域

1.什么是模块作用域

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

2.模块作用域的好处

防止了全局变量污染的问题

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

module 对象

概念

js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息

module.exports对象

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用

外界使用require()方法导入自定义模块时,得到的就是module.exports所指向的对象

<!-- 06.自定义模块的内容 -->
// 在一自定义模块中。默认情况下 module.exports = {}

const age = 20
// 向module.exports 对象上挂载 username属性

module.exports.username = 'zs'

//向module.exports 对象上挂载 sayHello方法 

module.exports.sayHello = function () {
    console.log('hello');
}
module.exports.age=age

<!-- 07.text.js的内容 -->

// 在外界使用require()方法 导入一个自定义模块,得到的成员
// 就是 那个模块中,通过module.exports指向的对象
const m  = require("./06.自定义模块");
console.log(m); // {}

共享成员时的注意点

使用require()方法导入模块时,导入的结果,永远以module.exports指向的对象为准

exports对象在默认的情况下exports和module.exports指向同一个对象 最终共享结果还是以module.exports指向为准

exports和module.exports的使用误区

时刻谨记,require()模块时,得到的永远是module.exports指向的对象 如下

exports.username = 'zs'

module.exports = {
    age:'18',
    name:'沈文'
}

以上代码在另一个js文件中导入后 进行打印 那么取到的结果 其实是

 age:'18',name:'沈文'

因为最终共享结果还是以module.exports指向为准

require()模块时,得到的永远是module.exports指向的对象 如下

module.exports.username = 'zs'

exports = {
    age:'18',
    name:'沈文'
}

以上代码在另一个js文件中导入后 进行打印 那么取到的结果 其实是

username = 'zs'

因为最终共享结果还是以module.exports指向为准

Node.js中的模块化规范

CommonJs规定了模块的特性和各模块之间如何相互依赖

CommonJS规定:

1 每个模块内部,module变量代表当前模块

2 module变量是一个对象,它的exports属性(即module.exports)是对外的接口

3 加载某个模块,其实是加载模块的module.exports属性。(require()方法用于加载模块)

小沈的这些知识点 总结的不到位地方或者不足的地方 还希望各位大佬可以给小沈进行补充 拜托啦  另外 希望这些知识点可以帮助到大家 大家一起进步 加油

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值