CommonJs模块化简明笔记

news2024/9/25 9:36:45

1、什么是模块化

模块化是指将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起。

最早我们开发将所有的代码写在一个js文件中,随着需求越来越复杂,代码量越来越大,如果仍然把所有代码写在一个js文件中,那么代码耦合度过高不方便后期维护,模块化将一个复杂的js文件按共同或类似的逻辑拆分成多个js文件,拆封的文件内部数据是私有的,只是向外部暴露一些接口(方法)与其他模块通信,不仅方便找到某一块功能点的代码,也可以达到复用的效果。
模块化的核⼼思想就是:模块之间是隔离的,通过导⼊导出进⾏数据和功能的共享

2、为什么需要模块化

随着需求越来越复杂,代码量越来越大,会出现如下问题:

  • 全局污染问题(多个引入js相同变量名、方法名)
  • 依赖混乱问题(引入顺序,导致结果不同)
  • 数据安全问题 (js中的数据会全部暴露出来)

3、导入和导出的概念

在这里插入图片描述

4、示例

4.1 暴露(导出)方式一:

创建 user.js

const name = '张三'
const age = 18
function getAddress (){
	return '甘肃省兰州市城关区'
}  
//通过给exports对象添加属性的⽅式,来导出数据
exports.name = name
exports.age = age
exports.getAddress = getAddress

创建 index.js

// 引⼊user模块暴露的所有内容
const user = require('./user.js')

console.log(name)
console.log(age)
console.log(name)

在这里插入图片描述

4.2 暴露(导出)方式二:

创建 user.js

const name = '张三'
const age = 18
function getAddress (){
	return '甘肃省兰州市城关区'
}  
//通过给exports对象添加属性的⽅式,来导出数据
module.exports ={
    name,
    age,
    getAddress
}

运行结果与第一种一致。

4.3 三种导入方式

// 直接引⼊模块,使用时需要 user.name 的方式
const user = require('./user')

// 引⼊同时解构出要⽤的数据 , 使用时,直接使用变量名
const { name, age, getAddress } = require('./user')


// 引⼊同时解构+重命名
const {name:myName,age,getAddress:myAdd} = require('./user')

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

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

相关文章

硬盘文件数据销毁|文件销毁|硬盘销毁|数据销毁|中国成就的伟大与数据安全在新时代国家安全中的关键作用

在当今世界,中国的发展成就举世瞩目,但令人惊讶的是,大多数人可能并未充分意识到其伟大之处。与此同时,数据安全作为国家安全的重要组成部分,其重要性在新时代愈发凸显。 二、中国取得的伟大成就 中国在经济领域的崛起…

iOS ------ 事件响应链

响应者链 响应者链是由一系列链接在一起的响应者(UIResponser之类:UIApplication,UIViewController,UIView)注组成的。一般情况下,一条响应链开始于第一响应者,结束于application对象。如果一个…

Ashok:一款多功能开源网络侦查OSINT工具

关于Ashok Ashok是一款多功能开源网络侦查公开资源情报OSINT工具,该工具可谓是OSINT领域中的瑞士军刀,广大研究人员可以使用该工具轻松完成网络侦查任务。 侦察是渗透测试的第一阶段,这意味着在计划任何实际攻击之前收集信息。因此&#xff…

【Linux】输入输出重定向

目录 一、概念 二、重定向的本质 三、系统调用接口dup和dup2 3.1 dup 3.2 dup2 一、概念 在之前对Linux的学习中,我们有接触过一系列的重定向命令,例如 >、>>等 它们可以将一个命令的输出或输入重定向到其他地方,如echo命令…

Java泛型的理解

前言 泛型是Java中一个比较重要的特性,是于JDK5引入新特性,其主要目的是为了提供编译时的类型安全检测机制和简化代码。本文主要探讨一下泛型的使用。 假如说没有泛型 假如说没有泛型,可以举一个例子: ArrayList list new Ar…

怎么把pdf转换成jpg图片免费?分享11款超实用的PDF转图片工具,工作效率直接拉满!

怎么把pdf转换成jpg图片?将PDF转换成图片,有多种方法可供选择,包括使用专业的PDF转换软件、在线转换工具,甚至电脑上有自带的转换方法。 pdf转图片的优势有很多,其中包括以下几点: 1、兼容性和可访性 转换…

Linux的platform设备驱动框架

platform其实就是linux中用来匹配设备和驱动的一种虚拟总线技术。之所以有这么个技术,是为了将驱动和设备分开来,设备负责描述设备信息,驱动负责实现功能逻辑。是一种分层思想下的产物。platform并不是局限于某一类设备,而是整个框…

鸿蒙(API 12 Beta3版)【视频解码】 音视频编码

开发者可以调用本模块的Native API接口,完成视频解码,即将媒体数据解码成YUV文件或送显。 当前支持的解码能力如下: 视频硬解类型视频软解类型AVC(H.264)、HEVC(H.265)AVC(H.264) 视频解码软/硬件解码存在差异,基于MimeType创建…

打造高品质短视频,四款好用的剪辑软件推荐!

作为一个热爱记录生活点滴的Vlogger,今天我想聊聊那些让我的视频剪辑之路变得轻松又有趣的剪辑软件。 福昕视频剪辑 链接:www.pdf365.cn/foxit-clip/ 首先,我要说的是福昕视频剪辑。它的界面设计非常人性化,让我可以一目了然地…

绝望者的希望——《这几年》

屈原在《离骚》里面说道:“路漫漫其修远兮,吾将上下而求索。”这句诗最有分量的两个字就是“求索”。许国忠的人生就是在用行动践行着这两个字。书作《这几年》正是他求索的轨迹。 他求索人间真情味。在书作里,我们大抵看到许国忠柔情的笔锋…

爬虫入门--了解相关工具

目录 1.爬虫与python 2.第一个爬虫 3.web请求的全过程 3.1服务器渲染 3.2前端JS渲染 4.浏览器工具 4.1Elements 4.2Console 4.3Source 4.4network(重点) 5.小结 1.爬虫与python 首先我们要知道,爬虫一定要用Python么? 非也~…

运算放大器电气测试中的典型参数

为了评估与空间应用相关的某些应力源的影响,在运算放大器的电气测试过程中会测量一组电气参数。以下是运算放大器中常用的典型参数。 尽管理想情况下,运放在输入端没有电流,输入和输出没有失调,增益无限,速度无限&…

环境配置:如何在IntelliJ IDEA中安装和修改JDK版本配置(以Windows为例)

环境配置:如何在IntelliJ IDEA中安装和修改JDK版本配置(以Windows为例) 为了在Java开发中使用最新的功能和优化,升级和配置JDK版本是必不可少的。本文将详细介绍如何下载、安装、配置最新的JDK版本,并在IntelliJ IDEA…

04_Electron 模块介绍

Electron 模块介绍 一、Electron 主进程和渲染进程中的模块(介绍)二、Electron remote 模块三、Electron 渲染进程中通过 remote 模块调用主进程中的 BrowserWindow 打开新窗口1、安装 electron/remote2、主进程中配置启用 remote 模块3、渲染进程引入 r…

大模型应用开发的框架

一、大语言模型的几个框架 1、python的版本langchain LangChain英文官方地址:https://www.langchain.com/ LangChain中文官网:https://www.langchain.com.cn/ Python官方地址:https://python.langchain.com/en/latest/ LangChain源代码地…

使用 Seurat 处理多模态数据

文章目录 前言一、Multimodal analysis有什么用?二、代码复现1.数据的导入2.构建seurat对象,并添加RNA和protein数据3.根据其单细胞 RNA 测序(scRNA-seq)图谱对细胞进行聚类4.并排可视化多种模态4.1.1可视化RNA和蛋白质水平,这里检测的基因CD19在蛋白质…

【博客搭建 第二篇章】项目中怎么引入其他的 icon

一、注册账号并将图标添加到自己的项目中 1、网站地址:https://www.iconfont.cn/ 2、注册 iconfont 账号 3、登录 iconfont 网站中 4、添加图标到购物车中 5、添加图标到项目中 6、生成在线连接 7、复制连接 二、项目中配置连接地址 找到项目中的 them…

嵌入式初学-C语言-十九

指针的引入 为函数修改实参提供支持为动态内存管理提供支持为动态数据及结构提供支持为内存访问提供另一种途径 指针的概述 内存地址: 系统为了内存管理的方便将内存划分为一个个内存单元(一个内存单元占一个字节),并为每一个…

YARN 调度器的配置与使用

YARN 调度器的配置与使用 一、启动公平调度器1.1 配置 yarn-site.xml创建 fail-scheduler.xml 文件 二、同步配置文件三、重启启动 YARN 集群四、提交作业五、运行结果 一、启动公平调度器 公平调度器的使用由属性yarn.resourcemanager.scheduler.class的设置所决定。YARN默认…

Effective Java学习笔记第27、28条原生态类型和非受检警告

目录 什么是泛型 泛型与编译器 不要轻易使用原生态类型 可以通过通配符类型来替代原生态类型 几个适合原生态类型的场景 消除非受检的警告 什么是非受检警告 如果无法消除警告 本书27-33条主要介绍泛型。首先介绍什么是泛型,它的应用场景是什么。然后重点介…