当前位置: 首页 > article >正文

node.js模块化分析

什么是Node.js模块化

Node.js中的模块化‌是指将一个大文件拆分成独立且相互依赖的多个小模块。每个JS文件被视为一个独立的模块,模块之间是互相不可见的。如果一个模块需要使用另一个模块,则需要使用指定的语法来引入该模块,并且只能使用模块所暴露的内容。

Node.js模块化的好处

1、‌避免全局变量污染‌:在团队协作中,不同成员会独立编写各自负责的代码。如果多个文件定义了同一个全局变量,会导致变量同名而报错。模块化可以避免这种情况,每个模块都有自己的作用域,避免了全局变量污染‌。
2、‌提高代码的可维护性和复用性‌:通过模块化,可以将复杂的系统拆分成多个小模块,每个模块负责一部分功能,这样不仅提高了代码的可维护性,也方便了代码的复用‌。

Node.js模块化的分类

// Node.js中的模块根据来源不同,可以分为以下三类:
// 1、‌内置模块‌:由Node.js官方提供的模块,例如fs、path、http等‌。
const fs = require('fs');
// 2、‌自定义模块‌:用户创建的每个.js文件,都是自定义模块‌。
const indexCp = require('./index.js')
// 3、‌第三方模块‌:由第三方开发出来的模块,使用前需要先下载‌。
const moment = require('moment')

模块作用域

在Node.js中,每个文件都被视为一个独立的模块,并拥有自己的模块作用域。这意味着在一个模块中定义的变量、函数或类是私有的,无法被其他模块直接访问。这种作用域的隔离性确保了模块之间的互不干扰,避免了全局变量的污染。

module 对象

在Node.js中,每个模块(文件)都会自动创建一个module对象。该对象包含了有关模块的各种信息,并提供了导出模块内容的接口。

// 主要属性:
// exports:这是导出一个模块的核心对象,使用require导入一个模块时,
const indexCp = require('./index')  // 默认情况下,indexCp是空对象 module.expores = {}
// filename:表示当前模块的文件路径
// id:表示当前模块的ID
// parent:表示引用当前模块的父模块
// paths:表示Node.js在解析模块时搜索模块的路径数

在这里插入图片描述
在这里插入图片描述

module.exports 应用

// index.js
const initUsername = '小灰灰学编程'
function getName(){
  console.log(`${initUsername}来自index.js模块`)
}
// 将变量&方法导出
module.exports = {
  initUsername,
  getName
}

// modularization.js
const indexModule = require('./index') // 引入模块
console.log(indexModule, 'indexModule')
indexModule.getName() // 执行模块中的方法

在这里插入图片描述


http://www.kler.cn/a/375638.html

相关文章:

  • Flutter配置Android和iOS允许HTTP访问:一步步指南
  • 移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (2) - 移植 nanovg
  • Partition架构
  • 「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用
  • 操作系统实验记录
  • Vue3和Springboot前后端简单部署
  • C++ 文件操作详解
  • 多线程2之线程同步
  • 考研要求掌握的C语言(二叉排序树专题)
  • blender 小车建模 建模 学习笔记
  • C++之多态(上)
  • [实时计算flink]CREATE TABLE AS(CTAS)语句
  • 部署服务器监控集群之“Prometheus Grafana Alertmanager“
  • 智慧城市:未来城市的蓝图
  • Jupyter Notebook 打开指定文件夹
  • Straightforward Layer-wise Pruning for More Efficient Visual Adaptation
  • 用示波器如何测量信号的相位差?
  • 鸿蒙系统不断发展的看法
  • Python实现Lucas-Lehmer测试
  • Android 滴滴面经
  • No.22 笔记 | WEB安全 - 任意文件绕过详解 part 4
  • 深入理解数据库的三范式
  • OpenCV—HoughLines中的theta角度理解
  • ArcGIS Pro SDK (二十一)渲染
  • CSP/信奥赛C++刷题训练:经典差分例题(3):洛谷P5542 :[USACO19FEB] Painting The Barn S
  • fastboot相关的命令大全