程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • Vue

  • Nuxt

  • Echarts

  • Node

    • node基础
    • node模块化
      • Node模块化
      • 基本概念
      • 加载模块
      • 模块作用域
        • 向外共享模块作用域中的成员
        • module.exports对象
        • exports对象
        • 误区案例
      • 模块化规范
    • npm
    • demo
  • git

  • express

  • 微信小程序

  • Spring

  • 后端知识

  • Markdown

  • project

  • 自用文档查询

  • 框架和软件
  • Node
yuadh
2022-02-10
目录

node模块化

# Node模块化

  • 模块化的基本概念
  • Node.js 中模块的分类
  • npm与包
  • 模块的加载机制

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

编程领域的模块化

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

  • 提高了代码的复用性
  • 提高了代码的可维护性
  • 可以实现按需加载

模块化规范

模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的那些规则

  • 使用什么样的语法格式来引用模块
  • 在模块中使用什么 样的语法格式向外暴漏成员

# 基本概念

Node.js中根据模块来源的不同,将模块分为了 3 大类

  • 内置模块(由官方提供,列如fs、path、http等)
  • 自定义模块(自己写的 js 文件)
  • 第三方模块

# 加载模块

require() 方法可以加载需要的内置模块、自定义模块、第三方模块

const fs = require('fs')
const custom = require('./custom.js')//也能省略后缀名
const moment = require('moment')
1
2
3

注意

require()方法加载其它模块时,会执行被加载模块中的代码

# 模块作用域

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

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

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

示例

Module {
  id: '.',
  path: 'H:\\code-demo\\learn-m\\heima76\\11.node.js\\02.path',
  exports: {},
  filename: 'H:\\code-demo\\learn-m\\heima76\\11.node.js\\02.path\\m2.js',
  loaded: false,
  children: [
    Module {
      id: 'H:\\code-demo\\learn-m\\heima76\\11.node.js\\02.path\\m1.js',
      path: 'H:\\code-demo\\learn-m\\heima76\\11.node.js\\02.path',
      exports: {},
      filename: 'H:\\code-demo\\learn-m\\heima76\\11.node.js\\02.path\\m1.js',
      loaded: true,
      children: [],
      paths: [Array]
    }
  ],
  paths: [
    'H:\\code-demo\\learn-m\\heima76\\11.node.js\\02.path\\node_modules',
    'H:\\code-demo\\learn-m\\heima76\\11.node.js\\node_modules',
    'H:\\code-demo\\learn-m\\heima76\\node_modules',
    'H:\\code-demo\\learn-m\\node_modules',
    'H:\\code-demo\\node_modules',
    'H:\\node_modules'
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# module.exports对象

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

默认情况下是一个空对象 {}

如果要向外共享成员,需要对exports对象挂载

module.exports.username = 'yuadh'
module.exports.password = '123'
module.exports.login = function(){
    console.log('loging');
}
1
2
3
4
5

此时打印出的不再是一个空对象

注意

require方法导入模块是,导入的结果,永远以 module.exports 对象为准,如果对象被覆盖就是覆盖的内容

# exports对象

module.exports 对象和 exports 对象指向同一个内容 (exports指向module.exports对象)

最终指向以 module.exports 对象 挂载内容为最终结果

# 误区案例

  • case 1
exports.username = 'y'
module.exports = {
    gander : 'man',
    age : 22
}
//最终结果为 {gander:'man',age:22}
1
2
3
4
5
6
  • case 2
module.exports.username = 'y'
exports = {
    gander: 'man',
    age:22
}
//最终结果为 {username:'y'}
1
2
3
4
5
6
  • case 3
exports.username = 'y'
module.exports.gander = 'man'
//最终结果 {username:'y',gander:'man'}
1
2
3
  • case 4
exports = {
    gander: 'man',
    age:22
}
module.exports.username = 'y'
//最终结果为{username:'y',gander:'man',age:22}
1
2
3
4
5
6

# 模块化规范

Node.js 遵循了 CommonJS 模块化规范,CommonJs 规定了模块的特性与各模块之间如何互相依赖

  • 每个模块内容,module 变量代表当前模块
  • module 变量是一个对象,它的 exports 属性 是对外的接口
  • 加载某个模块,其实是加载改模块的 module.exports 属性 ,require()用于加载模块
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
node基础
npm

← node基础 npm→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×