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

node.js的模块化 与 CommonJS规范

 一、node.js的模块化

(1)什么是模块化?

将一个复杂的程序文件依据一定的规则拆分成为多个文件的过程就是模块化

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

语法 :   const 变量名 = require('模块的路径');

(2)什么是模块化项目?

编码是按照模块一个一个编码的,整个项目就是一个模块化的项目

(3)模块化的好处?

防止命名冲突、高复用性、高维护性

二、node.js的模块化代码初体验

(1)两种暴露数据的方式

方式一:module.exports=value
方式二:module.name=value

代码示例:我建两个文件夹

文件夹一的内容:

// 调用初体验2.js里面的函数
// 一.导入模块
const first=require('./36-1初体验2');// 二.调用函数
// 方式一:module.exports=value
// (1)调用函数first
first();
//输出结果为:我是初体验2里面的内容1
// (2)调用函数second、third
first.second();   
first.third();
//输出结果为:我是初体验2里面的内容2  我是初体验2里面的内容3// 方式二:module.name=value
// (1)调用函数second、third
console.log(first);
//输出结果为:{ sc: [Function: second], th: [Function: third] }

文件夹二的内容:

// 一、声明函数 下面我声明三个函数来依次举例:
function first(){console.log('我是初体验2里面的内容1');
}
function second(){console.log('我是初体验2里面的内容2');
}
function third(){console.log('我是初体验2里面的内容3');
}
// 二、暴露数据
// 方式一:module.exports=value
// (1)暴露数据first:
module.exports=first;   //我是初体验2里面的内容1
// (2)暴露数据second和third:
module.exports={second,third
}
// 方式二:module.name=value
// (1)暴露数据second和third:
exports.sc=second;
exports.th=third;

(2)注意点

1》module.exports可以暴露任何数据

文件夹two:

module.exports="love";
module.exports="爱";
module.exports="520";

文件夹one

const a=require('./two');
console.log(a);

分别将文件夹two的数据输出,运行文件夹one的结果显示:

2》不能使用exports=value的形式暴露数据

文件夹two:

exports='love'

文件夹one:

const a=require('./two');
console.log(a);

运行文件夹one的结果显示:

3》模块内部module与exports有隐式关系 exports=module.exports={ }

文件夹two:

console.log(exports);
console.log(exports===module.exports);

运行文件夹two的结果显示:

三、 CommonJS规范

(1)什么是CommonJS规范?

CommonJS规范最初是为Node.js设计的,但现在也在其他环境中得到广泛应用。它用于模块化编程的一种标准。它提供了一种方式来定义模块,以及如何在不同的node.js环境中共享和重用这些模块。

CommonJS规范提供了一种简单而一致的方式来组织和管理node.js代码中的模块。这使得在不同环境中重用和共享代码变得更加容易

(2)关于CommonJS规范的一些关键操作

1.定义模块

在CommonJS中,每个文件都被视为一个模块。你可以通过module.exportsexports对象来导出模块的公共API。

module.exports、exports、require..都是模块化规范中的内容。

node.js实现了CommonJS模块化规范,它们二者关系就等同于javascript与ECMAScript

2.引入模块

使用require函数来引入其他模块

3.模块标识

在CommonJS中,模块的标识是文件的路径。当你使用require函数时,它会根据传入的路径来查找并加载相应的模块

4. 模块加载

当模块被首次require时,它会被加载并执行。CommonJS模块系统提供了同步加载的机制,这意味着在模块被加载之前,代码的执行会暂停

5. 模块缓存

一旦模块被加载,它就会被缓存起来。这意味着多次require同一个模块会返回第一次加载时的结果,而不是重新加载和执行模块

6.错误处理

如果require函数无法找到指定的模块,它会抛出一个错误。在Node.js中,这通常会导致进程退出

7. 模块系统扩展:

虽然CommonJS规范定义了模块的基本行为,但具体的实现可能会因环境而异。例如,Node.js提供了许多内置模块,如fshttp等,这些模块提供了与底层系统交互的功能

http://www.lryc.cn/news/329907.html

相关文章:

  • RK3588平台开发系列讲解(PWM开发篇)
  • 宝塔面板操作一个服务器域名部署多个网站
  • surfer绘制等值线图
  • 免费开源的 AI 绘图工具 ImgPilot
  • Java系统架构设计:构建稳定高效的软件基石
  • 【IntermLM2】学习笔记
  • 【二叉树】Leetcode 230. 二叉搜索树中第K小的元素【中等】
  • JS中常用的几种事件
  • Android WebView的使用与后退键处理
  • 【备忘录】Docker 2375远程端口安全漏洞解决
  • 343. 整数拆分(力扣LeetCode)
  • Spring面试题系列-3
  • 【比特币】比特币的奥秘、禁令的深层逻辑与风云变幻
  • 【情感分析概述】
  • 【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组
  • 5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)
  • Python版【植物大战僵尸 +源码】
  • 【明道云】如何让用户可以新增但不能修改记录
  • GPT-1原理-Improving Language Understanding by Generative Pre-Training
  • web3.0入门及学习路径
  • MATLAB 自定义中值滤波(54)
  • harmonyOS的客户端存贮
  • 安科瑞智慧安全用电综合解决方案
  • Web 前端性能优化之二:图像优化
  • android——枚举enum
  • Day54:WEB攻防-XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架
  • 2024年MathorCup数学建模思路C题思路分享
  • HCIP作业
  • 如何向sql中插入数据-接上一篇《MySQL数据库的下载和安装以及命令行语法学习》续
  • 简单的HTML