JavaScript模块化——JS模块化介绍与CommonJS规范

news2024/11/17 1:28:11

作者:CSDN-PleaSure乐事

欢迎大家阅读我的博客 希望大家喜欢

使用环境:vscode Chrome浏览器

目录

1.模块化概述

1.1什么是模块化

1.2为什么需要模块化

1.2.1全局污染

1.2.2依赖混乱

1.2.3数据安全

2.有哪些模块化规范

3.导入与导出

3.1导入

3.2导出

3.3大白话

4.CommonJs

4.1准备阶段

4.1.1文件1:school.js

4.1.2文件2:student.js

4.2导出数据

4.2.1方法一

 4.2.2方法二

4.2.3注意点

4.3导入数据

4.4在浏览器中使用上述代码


1.模块化概述

1.1什么是模块化

  1. 将程序⽂件依据⼀定规则拆分成多个⽂件,这种编码⽅式就是模块化的编码⽅式。
  2. 拆分出来每个⽂件就是⼀个模块,模块中的数据都是私有的,模块之间互相隔离。如果不进行隔离,可能会造成模块间的变量定义有冲突,导致程序崩溃。
  3. 同时也能通过⼀些⼿段,可以把模块内的指定数据“交出去”,供其他模块使⽤。

1.2为什么需要模块化

随着应⽤的复杂度越来越⾼,其代码量和⽂件数量都会急剧增加,会造成如全局污染、依赖混乱、数据安全等问题。

1.2.1全局污染

其中全局污染问题是html文件引入不同js文件时,js当中同名的函数、变量等因引入先后顺序的问题导致相互覆盖,最终造成调用不清晰的问题,如a.js和b.js中都包含函数getData,但是由于a先引入而b后引入,最终在函数调用时,我们会使用b、中的getData。

1.2.2依赖混乱

依赖混乱主要是由于引入js文件顺序不同最终导致页面效果混乱,例如若某几个js文件引入后正常显示轮播图效果,但是改变其中某些文件的顺序后,则控制台会直接产生报错:

1.2.3数据安全

在js文件引入后,若不及时有效处理,可能会直接造成用户密码等敏感信息泄漏,进而造成损失。

2.有哪些模块化规范

随着时间的推移,针对 JavaScript 的不同运⾏环境相继出现了多种模块化规范。按照时间排序有以下四种模块化规范:

  1. CommonJS——服务端应用广泛
  2. AMD
  3. CMD
  4. ES6模块化——浏览器端应用广泛

3.导入与导出

模块化的核⼼思想就是:模块之间是隔离的,通过导⼊和导出进⾏数据和功能的共享。

3.1导入

导入的概念是引入并使用其他模块导出的内容,并重用其代码和功能。

3.2导出

导出的概念是模块公开一部分内容,例如变量函数等使得其他模块可以使用这些变量函数。

3.3大白话

导入与导出使用通俗的大白话讲就是一家商店卖(导出)一些商品(变量或方法)给顾客,顾客对商品进行购买(导入),并使用它们(重用)。这就是模块的导入与导出。

4.CommonJs

4.1准备阶段

首先我们先准备两个js文件供后续使用:

4.1.1文件1:school.js

const name = '蓝翔'
const slogan = '你干嘛哎呦'

function getTel (){
  return '12345678'
}

function getCities(){
  return ['北京','上海','深圳','成都','武汉','西安']
}

4.1.2文件2:student.js

const name = '张三'
const motto = '我可以'

function getTel (){
  return '246810'
}

function getHobby(){
  return ['唱','跳','rap']
}

此时在两个js文件当中我们都未讲文件进行导出,若此时我们想要在另外一个js文件当中对school和student文件进行引入,会产生如下问题:

若我们右键进行run code操作,会发现控制台打印一个空对象,原因是此时我们并没有给school和student当中的对象“填入”内容,会导致最终打印出空对象。

因此我们就需要引出4.2的内容:导出数据。

4.2导出数据

4.2.1方法一

首先是方法一,若我们不想要打印的对象为空对象,我们可以使用exports来导出,我们在student.js后加入这段代码即可实现导出:

exports.name = name
exports.slogan = slogan
exports.getTel = getTel

在school当中使用exports一样有效:

 4.2.2方法二

我们使用module.exports也可以得出类似的效果。我们可以使用module直接赋值称为对象。

在两个js文件当中,分别加入如下代码即可达成与exports类似的效果:

//school.js
module.exports = {name,slogan,getTel}
//student.js
module.exports = {name,motto,getTel}

4.2.3注意点

在进行数据导入时,我们需要注意每个模块内部的this、exports、modules.exports 在初始时,都指向同⼀个空对象,该空对象就是当前模块导出的数据。⽆论如何修改导出对象,最终导出的都是 module.exports 的值。

4.3导入数据

如果我们想要导入数据,那我们直接在index.js当中使用require即可:

//赋值前直接进行解构
const {name,slogan,getTel} = require('./school.js')
//使用重命名防止变量名冲突,即变量名+冒号
const {name:stuName,motto,getTel:stuTel} = require('./student.js')
console.log(name)
console.log(slogan)
console.log(getTel())
console.log(stuName)
console.log(motto)
console.log(stuTel())

最终会得出如下结果:

 

4.4在浏览器中使用上述代码

Node.js 默认是⽀持 CommonJS 规范的,但浏览器端不⽀持,所以需要经过编译。

因此我们可以得出如下步骤:

首先我们需要全局安装browserify

npm i browserify -g

然后进行编译

browserify index.js -o build.js

随后会生成build文件,我们在页面中进行引入就可以完成代码在浏览器端的引入与使用。

作者:CSDN-PleaSure乐事

希望我的博客对您有帮助,也希望在对您有帮助时您可以为我留下点赞收藏与关注,这对我真的很重要,谢谢!

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

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

相关文章

YOLOV5单目测距+车辆检测+车道线检测+行人检测(教程-代码)

YOLOv5是一种高效的目标检测算法,结合其在单目测距、车辆检测、车道线检测和行人检测等领域的应用,可以实现多个重要任务的精确识别和定位。 首先,YOLOv5可以用于单目测距。 通过分析图像中的目标位置和尺寸信息,结合相机参数和几…

React原理之Fiber详解

前置文章: React原理之 React 整体架构解读React原理之整体渲染流程 -----读懂这一篇需要对 React 整体架构和渲染流程有大致的概念 😊----- 在React原理之 React 整体架构解读中,简单介绍了 Fiber 架构,也了解了 Fiber 节点的…

一个云端应用市场和配套的移动办公APP,支持iOS和Android端,可私有部署,支持在线体验(附源码)

前言 在当前的企业应用市场中,许多移动办公软件不仅成-本高昂,而且在功能对接和接口完整性方面存在不足,导致开发成本居高不下。这促使企业和开发者寻求更加经济、高效且功能丰富的处理方案。 介绍 O2OA(翱途)开发平…

【15】大数据题目等

目录 一.大数据题目的解题技巧​编辑 二.找重复的URL 三.利用小内存找出所有出现两次的数。 四.位运算题目 五.面试原题 六,.判断一个32位正数是不是2的幂,4的幂 七.位运算实现加减乘除 加法 减法 乘法 除法 一.大数据题目的解题技巧 二.找重复的URL 方法…

uni-app--》打造个性化壁纸预览应用平台(一)

🏙️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名前端工程师 🌄个人主页:亦世凡华、 🌆系列专栏:uni-app 🌇座右铭:人生亦可燃烧,亦可腐败&#xf…

linux更换为阿里云的yum下载镜像源

更换镜像源 1.备份: sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.创建一个文件: cd /etc/yum.repos.d/ touch CentOS-Base.repo 3.往CentOS-Base.repo添加内容 vi CentOS-Base.repo 添加以下内容: [base…

vue3 组合式 API:setup()

查看vue3官网介绍:组合式 API:setup() 在 Vue 3 中,组合式 API 的 setup() 函数是一个非常重要的特性,它提供了一种更灵活和可维护的方式来组织组件的逻辑。 基本概念 setup() 函数是在组件实例创建之前执行的,它用于…

重复玩一个游戏就是自闭症吗?自闭的特征有哪些?

重复玩一个游戏并不一定是自闭症的标志。儿童在成长过程中,有时会因为对某个游戏或活动的喜爱而反复进行,这是他们探索世界、发展兴趣和技能的一种方式。然而,如果这种行为伴随着其他自闭症的典型特征,如语言障碍、社交障碍和兴趣…

C语言 ——— 修改默认对齐数以及结构传参

目录 前言 修改默认对齐数 结构体传参 前言 在上一篇中,有讲解到结构体内存对齐的规则以及默认对齐数 C语言 ——— 结构体内存对齐-CSDN博客 修改默认对齐数 修改默认对齐数所需要的宏命令:#pragma 代码演示: #pragma pack(1) // 将默…

MVCC工作原理深入解析

一、事务概述 mysql事务是指一组命令操作,在执行过程中用来保证要么全部成功,要么全部失败。事务是由引擎层面来支持的,MyISM引擎不支持事务,InnoDB引擎支持事务。 事务具有ACID四大特性 原子性(Atomicity&#xff0…

XSS靶场(1-11关)

目录 简述xss xss第1关 xss第2关 ​编辑 xss第3关 xss第4关 xss第5关过滤了 on script xss第6关 xss第7关 xss第8关 xss第9关 xss第10关 xss11关 我把源代码靶场放到了最顶端 简述xss XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法…

【数据结构与算法 | 图篇】最小生成树之Prim算法

1. 前言 普里姆算法(Prims Algorithm)是一种用于寻找加权无向图中的最小生成树(Minimum Spanning Tree, MST)的贪心算法。 最小生成树是指对于一个给定的无向图,连接所有顶点且边的总权重最小的生成树。 2. 算法步骤 …

Spring Boot 核心配置

一、 Spring Boot配置文件分类 SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置 applicat…

外贸市场开发【越南】

​作为“新兴之秀” 越南的经济发展可谓是突飞猛进 并在2022年,成为全亚洲经济增长最快速经济体 经济的增长也让越南的地位变得不一样了 一起来看看外贸人聚焦的东南亚排名前五的越南 越南社会主义共和国,通称越南,是位于东南亚的中南半岛…

谷粒商城实战笔记-213-商城业务-认证服务-整合短信验证码服务

文章目录 一,开通阿里云云市场短信服务1,阿里云开通免费短信服务并调试2,整合短信服务2.1 下载HttpUtils代码2.2 开发调用短信服务的组件2.3 测试 HttpUtils代码 这一节主要内容是整合短信发送服务。 一,开通阿里云云市场短信服务…

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现CPO-BP冠豪猪优化…

CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器 课程内容 上面三张Slides讲述了运行时间(runtime)和内存使用&…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT? ChatGPT是由 OpenAI 开发的先进人工智能语言模型,能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议,甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本,它们都拥有强大的语言处理能力&…

sublime text 4 安装(含激活码)安装破解汉化 Sublime Text 4 的操作指南

sublime text 4 安装(含激活码) 一、下载步骤 官网地址:Sublime Text - the sophisticated text editor for code, markup and prosehttps://link.zhihu.com/?targethttps://www.sublimetext.com/ windows下载链接:Thank You -…

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…