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.hqwc.cn/news/593405.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】vector问题解决(非法的间接寻址,迭代器失效 , memcpy拷贝问题)

送给大家一句话: 世界在旋转,我们跌跌撞撞前进,这就够了 —— 阿贝尔 加缪 vector问题解决 1 前言2 迭代器区间拷贝3 迭代器失效问题4 memcpy拷贝问题 1 前言 我们之前实现了手搓vector,但是当时依然有些问题没有解决&#xff…

异地组网怎么管理?

在当今信息化时代,随着企业的业务扩张和员工的分布,异地组网已经成为越来越多企业的需求。异地组网管理相对来说是一项复杂而繁琐的任务。本文将介绍一种名为【天联】的管理解决方案,帮助企业更好地管理异地组网。 【天联】组网的优势 【天联…

一文弄懂CNN/RNN/GAN/Transformer等架构

1. 引言 本文旨在友好地介绍深度学习架构,包括卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)、transformer 和 encoder-decoder 架构。 闲话少说,让我们直接开始吧。 …

小组分享内容第一部分:总览+HttpClients

目录 1.网络爬虫的作用(人话): 2.使用的工具 3.不使用程序进行网页信息的获取的操作步骤 4.如何使用程序来进行上述操作 1.打开浏览器 2.输入网址 3.发送请求 4.获取响应 5.判断响应是否成功 6.获取响应里需要的内容 7.记得最后关…

前端三剑客 —— CSS ( 坐标问题 、定位问题和图片居中 )

前期内容回顾: 1.常见样式 text-shadow x轴 y轴 阴影的模糊程度 阴影的颜色 box-shadow border-radio 实现圆角 margin 内边距 padding 外边距 background 2.特殊样式 媒体查询:media 自定义字体:font-face { font-family:自定义名称&#…

Sora的阅读技术报告

sora的技术报告 走进sorasora的特性sora的介绍sora的实际操作sora的发展安全措施研究技术 走进sora 大家好,我是清风之上。随着人工智能的发展,慢慢的他已经出现在我们生活中的各个角落,其中有API推出的sora,让我们震惊不已&…

【5】JavaScript - 控制语句 循环[ for/while ]

控制语句 while/do...while 语句while 语句:do...while 语句:两者的区别无限循环 for 语句普通的 for 循环for...in 循环for...of 循环 循环过程:跳出/跳过跳出跳过 循环嵌套扩展延申:做一次杠精 当前 控制语句 章节主要介绍 循环…

Redis面试题28道

1、什么是类加载器,类加载器有哪些? 1、什么是类加载器? 类加载器负责加载所有的类,其为所有被载入内存的类生成一个 java.lang.Class 实例对象。 2、类加载器有哪些? JVM 有三种类加载器: &#xff08…

10种常见的软件架构模式

软件架构模式 在开始主要的代码开发之前,必须选择一种合适的体系架构,它将提供所需的功能和质量属性。因此,在将它们应用到设计之前,应该先了解不同的体系结构。 什么是架构模式 架构模式是在给定上下文中解决软件架构中常见问题…

模拟退火遗传算法GASA-附MATLAB代码

模拟退火遗传算法(Simulated Annealing Genetic Algorithm,SAGA)结合了模拟退火算法(Simulated Annealing,SA)和遗传算法(Genetic Algorithm,GA)的优点,用于解…

【OpenCV】图像像素的遍历

1 前言 介绍两种遍历像素的方法(非指针、指针)。注意:.at() .ptr()的作用、用法。相关API: Mat对象.ptr() Mat对象.at() 2 代码及内容 #include "iostream" #include "opencv2/opencv.hpp"using namespac…

Django之关系模型的序列化

一、关系模型的序列化-多查1 1.1、模型准备 from django.db import models# Create your models here. class Classes(models.Model):name = models.CharField(max_length=20, verbose_name=班级)class Student(models.Model):SEX_CHOICES = ((1,男)), (2, 女)name = models.C…