【Node.js学习 day4——模块化】

模块化介绍

  1. 什么是模块化与模块?
    将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化
    其中拆分的每个文件就是一个模块,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用。
  2. 什么是模块化项目?
    编码时是按照模块一个一个编码的,整个项目就是一个模块化的项目
  3. 模块化好处
    · 防止命名冲突
    · 高复用性
    · 高维护性

模块化初体验

自定义模块 test.js

function tiemo(){console.log('贴膜.........');
}//暴露数据
module.exports = tiemo;

主程序index.js

//引入自定义模块
const tiemo = require('./test.js');
//调用函数
tiemo();

调用:
在这里插入图片描述

模块暴露数据

模块暴露数据的方式有两种:

  1. module.exports = value
  2. exports.name = value

使用时有几点注意:

  • module.exports可以暴露任意数据
  • 不能使用exports = value的形式暴露数据,模块内部module与exports的隐式关系exports = module.exports = {}
    在这里插入图片描述
    代码示例:
    test.js
function tiemo(){console.log('贴膜.........');
}function niejiao(){console.log('捏脚.........');
}//暴露数据
module.exports = {tiemo,niejiao};

index.js

//引入自定义模块
const me = require('./test.js');console.log(me);

导入文件模块

在模块中使用require传入文件路径即可引入文件

const test = require('./me.js');

require使用的一些注意事项:

  1. 对于自己创建的模块,导入时路径建议写相对路径,且不能省略./和…/
  2. js和json文件导入时可以不用写后缀,c/c++编写的node扩展文件也可以不写猴嘴,但是一般用不到
  3. 如果导入其他类型的文件,会以js文件进行处理
  4. 如果导入的路径是个文件夹,则会首先检测该文件夹下package.json文件中main属性对应的文件,如果main属性不存在,或者package.json不存在,则会检测文件夹下的index.js和index.json,如果还是没找到,就会报错。
  5. 导入node.js内置模块时,直接require模块的名字即可,无需加./和…/
module.exports、exports以及require这些都是CommonJS模块化规范中的内容,而Node.js实现了CommonJS模块化规范。

require导入模块的基本流程

  1. 将相对路径转为绝对路径,定位目标文件
  2. 缓存检测
  3. 读取目标文件代码
  4. 包裹为一个函数并执行(自执行函数)。通过arguments.callee.toString()查看自执行函数
  5. 缓存模块的值
  6. 返回module.exports的值
function require(file){//将相对路径转为绝对路径,定位目标文件let absolutePath = path.resolve(__dirname, file);//2.缓存监测if(caches[absolutePath]){return caches[absolutePath];}//3.读取文件的代码let code = fs.readFileSync(absolutePath).toString();//4.包裹为一个函数  然后执行let module = {};let exports = module.exports ={}(function (exports, require, module, __filename, __dirname){const test = {name:'尚硅谷'}module.exports = test;//输出console.log(arguments.callee.toString());})(exports, require, module, __filename, __dirname)//5.缓存结果caches[absolutePath] = module.exports;//6.返回module.exports的值return module.exports;
}const m = require('./me.js');

CommonJS模块化规范

module.exports、exports以及require这些都是CommonJS模块化规范中的内容。而Node.js是实现了CommonJS模块化规范,二者关系有点像JavaScript与ECMAScript

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/342067.html

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

相关文章

网上的大流量卡,这几点不注意你就申请不到了

网上的大流量卡月租低,流量多,相对于手机套餐每个月我们可以省下不少的费用,但是,流量卡便宜归便宜,也并不是随便申请的,以下这几种情况大家先自查一下,有的话,建议你不要申请了&…

机器学习-线性回归

1、线性回归解决的问题 线性回归是利用被称为线性回归方程的最小平方函数对一个或者多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或者多个被称为回归系数的模型参数的线性组合。 2、一元线性回归 一元线性回归分析:找到一条直线能够最大程…

(Arcgis)matlab编程批量处理hdf4格式转换为tif格式

国家青藏高原科学数据中心 中国区域1km无缝地表温度数据集(2002-2020) 此代码仅用于该数据集处理 版本:arcgis10.2 matlab2020 参考:MATLAB hdf(h5)文件转成tif图片格式(批量处理) 此代码仅用于该数据集处…

算法的复杂度分析

[王有志](https://www.yuque.com/wangyouzhi-u3woi/dfhnl0/hqrch62un0cc9sp2?singleDoc# 《🔥快来关注我》),一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:[共同富裕的Java人](https://www.yuque.com/wangyouzhi-u3woi/dfhnl0/n…

PostgreSQL 16 的新功能:双向逻辑复制

介绍 在这篇博客中,我们将讨论 Postgres 16 中新增的一些更高级的特性。假设您拥有一些 Linux、Postgres 和 SQL 的经验,因为我们不仅要讨论这些新功能,还要讨论如何实现它们。本博客是使用在 Ubuntu 23.04 上运行的 PostgreSQL 16&#xff…

6.3、SDN在云计算中的应用

目录 一、SDN概念 1.1、传统网络机制 1.2、SDN网络机制 1.3、二者区别 1.4、SDN架构 二、云数据中心 2.1、公有云环境特点 2.2、两大挑战 2.3、云数据中心引入SDN技术解决两大挑战 三、SDN云计算解决方案 3.1、SDN云计算解决方案之控制平面openflow协议 3.1.…

python入门,字符串详解

目录 1.通过下标索引取值 ​编辑 2.index()方法 2.replace方法 3.split方法 4.strip方法 5.count统计某字符串出现次数 ​编辑 6.len统计字符串长度 7.字符串的遍历 ​编辑 字符串支持下标索引,从前往后从0开始,从后往前…

19. 从零用Rust编写正反向代理, 配置数据的热更新原理及实现

wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来&#xff…

数字图像处理练习题

数字图像处理练习题 文章目录 数字图像处理练习题第 一 章1.什么是数字图像?2.数字图像有哪些特点?3.数字图像处理的目的是什么?4.简述数字图像的历史。5.数字图像有哪些主要应用?6.列举生活中数字图像的获得途径。7.结合自己的生活实例,举出一个数字图像的应用实例8.数字图…

Unity——VContainer的依赖注入

一、IOC控制反转和DI依赖倒置 1、IOC框架核心原理是依赖倒置原则 C#设计模式的六大原则 使用这种思想方式,可以让我们无需关心对象的生成方式,只需要告诉容器我需要的对象即可,而告诉容器我需要对象的方式就叫做DI(依赖注入&…

centos8部署MySQL5.7故障集

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 在centos8系统上安装MySQL,使用的是centos7上安装MySQL的脚本,出现了以下问题,以做记录&…

工程监测仪器振弦采集仪的应用及技术研究

工程监测仪器振弦采集仪的应用及技术研究 振弦采集仪是一种常用于工程监测的仪器,主要用于测量振动信号的频率、振幅及相位等参数。其应用和技术研究主要包括以下几个方面: 1. 结构监测:振弦采集仪可以用于对建筑物、桥梁、塔楼等结构物的振…