概念
模块化是指解决一个复杂问题时,自上向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元
-
现实中的模块化 小霸王游戏机
-
编程领域中的模块化 编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成 ## 独立并相互依赖的多个小模块
把代码进行模块化的拆分的好处
-
提高了代码的复用性
-
提高了代码的可维护性
-
可以实现按需加载
模块化的规范 模块化时遵循的规则
Node.js 模块分类
-
内置模块(内置模块是由Node.js官方提供的,例如fs path http 等)
-
自定义模块(用户创建的每个.js文件都是自定义模块)
-
第三方模块(由第三方开发出来的模块 使用前需要下载)
使用强大的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()方法用于加载模块)
小沈的这些知识点 总结的不到位地方或者不足的地方 还希望各位大佬可以给小沈进行补充 拜托啦 另外 希望这些知识点可以帮助到大家 大家一起进步 加油