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

nodejs模块化

文章目录

    • 什么是模块化
    • CommonJS
    • 模块的导入与暴露
    • 总结


什么是模块化

概念:将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并组合在一起。

模块的内部数据、实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信。

模块化的好处:

  1. 避免命名冲突,减少命名空间污染
  2. 降低耦合性;更好地分离、按需加载
  3. 高复用性:代码方便重用,别人开发的模块直接拿过来就可以使用,不需要重复开发类似的功能。
  4. 高可维护性:软件的声明周期中最长的阶段其实并不是开发阶段,而是维护阶段,需求变更比较频繁。使用模块化的开发,方式更容易维护。
  5. 部署方便

CommonJS

CommonJS 规范规定:每个模块内部,module 变量代表当前模块。这个变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口对象。加载某个模块,其实是加载该模块的 module.exports 对象。

模块的导入与暴露

俩个模块之间是互不影响的,为了使模块A使用模块B中的方法,就要暴露模块B中的方法,具体实现如下

  1. CommonJS
//文件:90模块化.js
const baseURL = '';
const getArraySum = arr => arr.reduce((sum, val) => sum += val, 0);module.exports = {url: baseURL,arraySum: getArraySum
};
//导入(另一个文件)
const arr = require('./90模块化.js');
console.log(arr.arraySum([1, 2, 3]));
  1. ES Module(命名导入导出)

exports对象用来导出当前模块的公共方法或属性。
export 变量实则是exports.xxx = 变量,是在给该模块的export对象添加属性

//文件93.命名导入和导出.js
export const url = "";
export function getArraySum(arr) {return arr.reduce((a, b) => a + b, 0);
}
//导入的文件(另一个文件)
import { url, getArraySum } from "./93.命名导入和导出.js";
console.log(getArraySum([1, 2, 3]));
  1. ES Module(默认导出)
//文件90模块化.jsconst baseURL = '';
const getArraySum = arr => arr.reduce((sum, val) => sum += val, 0);export default {url: baseURL,getArraySum
};//导入
import arr from './90模块化.js';
console.log(arr.getArraySum([1, 2, 3]));

总结

方法优点缺点
CommonJS1. 简单易用,语法简洁,易于理解和使用。
2. 动态性高,可在运行时动态加载模块。
3. 与现有的Node.js项目和包高度兼容,向后兼容性好。
1. 容易产生变量冲突,不支持命名空间。
2. 不利于工具进行静态分析。
3. 原生不支持浏览器环境,需借助工具才能在浏览器中使用。
ES命名导出1. 命名导出明确模块中的变量或函数,便于理解和维护。
2. 支持静态分析,利于工具优化和检查。
3. 支持默认和命名导出共存。
1. 语法稍显复杂,需用大括号导入和导出。
2. 在Node.js中使用需额外配置,如设置"type": "module"或使用.mjs文件扩展名。
ES默认导出1. 语法简洁直观,可导出整个对象或单个模块。
2. 灵活性高,可导出任意值,包括函数、对象、类等。
3. 支持静态分析,利于工具优化和检查。
1. 默认导出的名称在导入时可随意更改,可能导致命名不直观,影响代码可读性。
2. 在一个模块中同时使用默认导出和命名导出时,可能造成混淆。
http://www.dtcms.com/a/293471.html

相关文章:

  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十课——车牌识别的FPGA实现(2)实现车牌定位
  • XCKU035‑1SFVA784C Xilinx FPGA KintexUltraScale AMD
  • C# 类 封装 属性 练习题
  • 深度学习 --- 激活函数
  • 计算机底层入门 05 汇编学习环境通用寄存器内存
  • MDC(Mapped Diagnostic Context) 的核心介绍与使用教程
  • LINUX 722 逻辑卷快照
  • (Arxiv-2025)HiDream-I1:一种高效图像生成基础模型,采用稀疏扩散Transformer
  • 在PyCharm中复现LaneNet车道线检测模型
  • JavaScript 01 JavaScript 是什么
  • 医疗系统伪代码
  • Ctenos7最小化安装 可以ping通
  • MySQL InnoDB存储引擎深度解析:从原理到优化
  • 【JavaSE】JDBC和连接池学习笔记
  • k8s:利用helm离线部署consul v1.21.2
  • 【Altium Designer2025】电子设计自动化(EDA)软件——Altium Designer25版保姆级下载安装详细图文教程(附安装包)
  • @PostConstruct 注解
  • Python进阶第三方库之Numpy
  • Docker-compose:服务编排
  • M3088NL是一款网络滤波器/变压器支持100M和1000M网络环境,适用于高速网络传输场景M3088
  • 单片机的几种GPIO输入输出模型详解
  • JavaWeb学习打卡11(cookie(甜点)详解)
  • iView Table组件二次封装
  • RAG实战指南 Day 21:检索前处理与查询重写技术
  • 数据库隔离级别
  • SQL语句中锁的使用与优化
  • 正则表达式:文本处理的强大工具
  • 傲软录屏 专业高清录屏软件 ApowerREC Pro 下载与保姆级安装教程!!
  • 3.5 模块化编程实践
  • 路径平滑优化算法--Polynomial Spiral(多项式螺旋法)