Node.js--模块化

Node.js模块化

一、介绍

1.1 什么是模块化与模块

将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化

其中拆分出的每个文件就是一个模块,模块的内部数据都是私有的,不过模块可以暴露内部数据以便其他模块使用

1.2 什么是模块化项目

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

1.3 模块化好处

下面是模块化的一些好处

  1. 防止命名冲突
  2. 高复用性
  3. 高维护性

二、模块暴露数据

2.1 模块初体验

  1. 创建me.js
// 声明函数
function timeo(){console.log('...')
}
// 暴露数据
module.exports = tiemo
  1. 创建index.js
// 导入模块
const tiemo = require('./me.js')
// 调用函数
tiemo()

2.2 暴露数据

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

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

使用时有几点注意:

  • module.exports可以暴露任意数据
  • 不能使用 exports = value 的形式暴露数据,模块内部module与exports的隐式关系exports = module.exports = {},require返回的是目标模块中module.exports的值

三、导入(引入)模块

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

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

require使用的一些注意事项:

  1. 对于自己创建的模块,导入时路径建议写相对路径,且不能省略./../

  2. jsjson文件导入时可以不用写后缀,c/c++编写的node扩展文件也可以不写后缀,但是一般用不到

  3. 如果导入其他类型的文件,会以js文件进行处理

  4. 如果导入的路径是个文件夹,则会首先检测该文件下package.json文件中main属性对应的文件,

    如果存在则导入,反之不存在就会报错

    如果mian属性不存在,或者package.json不存在,则会尝试导入文件夹下的index.jsindex.json

    如果还是没找到,就报错

  5. 导入node.js内置模块时,直接require模块的名字即可,无需加./../

四、导入模块的基本流程

这里我们介绍一下require导入自定义模块的基本流程

  1. 将相对路径转为绝对路径,定位目标文件
  2. 缓存检测
  3. 读取目标文件代码
  4. 包裹为一个函数并执行(自执行函数)。通过arguents.callee.toString()查看自执行函数
  5. 缓存模块的值
  6. 返回module.exports的值

五、CommonJS规范

module.exportsexports以及require这些都是CommonJS模块化规范中的内容。

而Node.js是实现了CommonJS模块化规范,二者关系有点像JavaScript与ECMAScript

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

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

相关文章

背包问题(一)

题目一 01背包 有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数…

力扣C++|一题多解之数学题专场(2)

目录 50. Pow(x, n) 60. 排列序列 66. 加一 67. 二进制求和 69. x 的平方根 50. Pow(x, n) 实现 pow(x,n),即计算 x 的 n 次幂函数(即x^n)。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例…

听GPT 讲K8s源代码--pkg(八)

k8s项目中 pkg/kubelet/envvars,pkg/kubelet/events,pkg/kubelet/eviction,pkg/kubelet/images,pkg/kubelet/kubeletconfig这些目录都是 kubelet 组件的不同功能模块所在的代码目录。 pkg/kubelet/envvars 目录中包含了与容器运行…

JVM之内存与垃圾回收篇3

文章目录 8 垃圾回收8.1 基本理论8.1.1 对象的finalization机制8.1.2 理解System.gc8.1.3 内存溢出和内存泄漏8.1.4 Stop The World8.1.5 安全点和安全区域8.1.6 Java中的引用 8.2 垃圾回收算法8.2.1 引用计数法8.2.2 可达性分析8.2.2.1 使用MAT查看GC Roots8.2.2.2 使用JProfi…

整车总线系列——FlexRay 四

整车总线系列——FlexRay 四 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能…

linux:使用docker-compose提示No Space Left on Device

问题: 如标题 参考: How to Fix Docker’s No Space Left on Device Error | Baeldung on Linux

Spring使用注解存储Bean对象

文章目录 一. 配置扫描路径二. 使用注解储存Bean对象1. 使用五大类注解储存Bean2. 为什么要有五大类注解?3.4有关获取Bean参数的命名规则 三. 使用方法注解储存Bean对象1. 方法注解储存对象的用法2. Bean的重命名 在前一篇博客中( Spring项目创建与Bean…

TypeScript基础篇 - React-Rollup-TS环境实战

目录 RollupReactTS scripts/rollup.confog.js package.js Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。主要是做组件化的,如vite RollupReactTS scripts/rollup.confog.js // …

nginx 配置 wss加密访问 mqtt

1. 在服务器上部署mqtt服务 2.在宝塔上配置域名证书 3.nginx配置websocket server {listen 80;listen 443 ssl http2;server_name ws-xx.example.com;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/ws-xx.example.com;loca…

windows hadoop 开发测试版快速搭建

1、hadoop 包下载 清华大学开源软件镜像站下载(速度较快,但版本不全)官方各个版本 下载后解压。 添加环境变量 HADOOP_HOME。并将 %HADOOP_HOME%/bin、%HADOOP_HOME%/sbin 添加到 path 中。 ps:本文使用的是 hadoop-3.3.2 2、windows 环境准备 wind…

服务器量化训练操作说明

Freespace服务器预训练主要步骤: 首先登录堡垒机,命令如下: ssh xxxrelay.baidu-int.com (xxx为个人邮箱前缀) 密码为个人邮箱密码 登录工作机,命令如下: ssh l3yq01-gpu-255-122-22-00.e…

如何在小程序首页隐藏商品分类

​因为在分类页面有显示分类,所以有的商家希望在首页就不显示分类啦。下面就介绍一下如何在首页隐藏商品分类。 在小程序管理员后台->页面设置->首页,显示商品分类设置为否。设置后,在小程序首页商品分类就不会显示啦。注意&#xff1a…

django rest_framework 框架动态设置序列化返回的字段

动态修改字段可以使Django rest框架API像graphQL端点一样,只从模型中检索所需的字段。 一旦序列化器被初始化,就可以使用.fields属性访问序列化器上设置的字段字典。访问和修改此属性允许您动态修改序列化器。 显式地修改fields参数可以帮助您做一些奇…

RDBMS - MySQL

1、为什么推荐MySQL? MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),有几个主要原因导致它被广泛推荐和使用: 开源和免费: MySQL是开源软件,其核心代码可以免费获取和使用。这使得MySQL成…

chrome 网页 无法复制 插件

源码gitee chrome浏览器复制插件: 浏览器页面无法进行复制,该插件可以复制页面文本、代码 下载安装到浏览器,启用插件,可自己修改代码 可能和某些页面本身的复制功能有些冲突,解决中

【微信小程序】使用button组件来实现一个带有点击效果的按钮,按钮中间添加一个大的+号图标

在微信小程序中&#xff0c;你可以使用button组件来实现一个带有点击效果的按钮&#xff0c;并在按钮中间添加一个大的号图标。以下是一个示例代码&#xff1a; <button class"button"><text class"plus"></text> </button>.butt…

关于Integer类的一个有趣的面试问题

相信很多人觉得答案是false&#xff0c;false&#xff0c;因为Integer是一个类&#xff0c;把int类型的数据传给Integer类型的数据会创建一个对象&#xff0c;而a,b,c,d作为引用指向的是不同的地址&#xff0c;所以判断相同得到的结果应该是false 但这个想法就正中下怀了&#…

【Spring篇】初识 Spring IoC 与 DI

目录 一. Spring 是什么 ? 二. 何为 IoC ? 三. 如何理解 Spring IoC ? 四. IoC 与 DI 五 . 总结 一. Spring 是什么 ? 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽ 庞⼤…

探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法

目录 存储Bean对象Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储)Configuration(配置存储)Bean重命名Bean 获取Bean对象属性注入构造方法注入Setter注入Resource(注入关键字) 存储Bean对象 将对象存储在 Spring 中&#xff0c;有两种注解类…

opencv实现替换证件照颜色

程序可以实现蓝色底片变为红色底片&#xff08;但有点小bug&#xff09; 修改自&#xff1a;opencv&#xff1a;HSV颜色模型_opencv hsv_君浪的博客-CSDN博客 相关文章&#xff1a;OpenCV Mat数据类型指针ptr的使用_cv::mat ptr_AoboSir的博客-CSDN博客 【OpenCV】HSV颜色识…