目录
编程领域的模块化就是遵守固定的规则,把一个大文件拆成独立并且相互依赖的多个小模块
(1)提高代码的复用性
(2)提高代码的可维护性
(3)实现按需加载
对代码进行模块化拆分与组合时需要遵守的规则
根据来源不同分为三大类
(1)内置模块(nodejs官方提供 fs path http url等)
(2)自定义模块(用户自己创建的每个.js文件)
(3)第三方模块(由第三方创建出来的,使用前需要下载)
第三方模块和内置模块直接写模块名,自定义模块需要加路径
注意:使用require()加载其他模块,会执行被加载模块的代码
- /* 内置模块 */
- let http = require('http')
- // let fs = require('fs')//文件系统模块
- let path = require('path')//路径相关操作
- /* 第三方模块 */
- const mysql = require("mysql");
- /* 用户自定义模块 */
- const static1=require('./index')
可以省略.js后缀
2.4.1 什么是模块作用域
和函数作用域类似,只有在模块内才能被访问,这种模块级别的访问限制,就是模块作用域
2.4.2 模块作用域的好处
防止全局变量污染问题
2.5.1 module对象(控制台打印的module对象)存储了当前模块的有关信息
- Module {
- id: '.',
- path: 'E:\\goodProgram\\day0823\\js',
- exports: { name: 'lisa', age: 12, say: [Function: say] },
- parent: null,
- filename: 'E:\\goodProgram\\day0823\\js\\person.js',
- loaded: false,
- children: [],
- paths: [
- 'E:\\goodProgram\\day0823\\js\\node_modules',
- 'E:\\goodProgram\\day0823\\node_modules',
- 'E:\\goodProgram\\node_modules',
- 'E:\\node_modules'
- ]
- }
2.5.2 module.exports对象
1、 将模块内的成员共享出去,供外界使用,默认情况下,module.exports={}
2、外界使用require()方法导入自定义模块时,得到的就是module.exports所指的对象
- module.exports={
- name:'lisa',
- age:12,
- say:function(){
- console.log(this.name+'在自我介绍');
- }
- }
2.5.3 共享成员的注意点
使用require()方法导入模块时,导入的结果永远以module.exports指向的对象为准
2.5.4 exports对象
是module.exports的简写 指向同一个对象
require导入的永远都是module.exports指向的对象
不建议同一模块中同时使用exports和module.exports 



Node.js遵循CommonJS模块化规范,CommonJS规定了模块的特性和各模块之间如何相互依赖
(1)每个模块内部、module变量代表当前模块
(2)module变量是一个对象,他的exports属性(module.exports)是对外接口
(3)加载某个模块就是加载该模块的module.exports属性 ,require用于加载对应的模块