js模块化开发

news2024/12/27 18:35:18

◼ 到底什么是模块化、模块化开发呢?
 事实上模块化开发最终的目的是将程序划分成一个个小的结构;
 这个结构中编写属于自己的逻辑代码,有自己的作用域,定义变量名词时不会影响到其他的结构;
 这个结构可以将自己希望暴露的变量、函数、对象等导出给其结构使用;
 也可以通过某种方式,导入另外结构中的变量、函数、对象等;
◼ 上面说提到的结构,就是模块;按照这种结构划分开发程序的过程,就是模块化开发的过程;
◼ 无论你多么喜欢JavaScript,以及它现在发展的有多好,它都有很多的缺陷:
 比如var定义的变量作用域问题;
 比如JavaScript的面向对象并不能像常规面向对象语言一样使用class;
 比如JavaScript没有模块化的问题;

◼ 但是随着前端和JavaScript的快速发展,JavaScript代码变得越来越复杂了:
 ajax的出现,前后端开发分离,意味着后端返回数据后,我们需要通过JavaScript进行前端页面的渲染;
 SPA的出现,前端页面变得更加复杂:包括前端路由、状态管理等等一系列复杂的需求需要通过JavaScript来实现;
 包括Node的实现,JavaScript编写复杂的后端程序,没有模块化是致命的硬伤;
◼ 所以,模块化已经是JavaScript一个非常迫切的需求:
 但是JavaScript本身,直到ES6(2015)才推出了自己的模块化方案;
 在此之前,为了让JavaScript支持模块化,涌现出了很多不同的模块化规范:AMD(x)、CMD(x)、CommonJS等;
 

????

CommonJS


◼ 我们需要知道CommonJS是一个规范,最初提出来是在浏览器以外的地方使用,并且当时被命名为ServerJS,后来为了体现它的广泛性,修改为CommonJS,平时我们也会简称为CJS。
 Node是CommonJS在服务器端一个具有代表性的实现;
 Browserify是CommonJS在浏览器中的一种实现;
 webpack打包工具具备对CommonJS的支持和转换;
◼ 所以,Node中对CommonJS进行了支持和实现,让我们在开发node的过程中可以方便的进行模块化开发:
 在Node中每一个js文件都是一个单独的模块;
 这个模块中包括CommonJS规范的核心变量:exports、module.exports、require;
 我们可以使用这些变量来方便的进行模块化开发;
◼ 前面我们提到过模块化的核心是导出和导入,Node中对其进行了实现:
 exports和module.exports可以负责对模块中的内容进行导出;
 require函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中的内容;

common-js的使用

1.直接获取导出的对象, 从对象中获取属性

util.js

const UTIL_NAME = "util_name"
 
function formatCount() {
  return "200万"
}
 
function formatDate() {
  return "2022-10-10"
}
 
console.log(exports) // {}
 
exports.UTIL_NAME = UTIL_NAME
exports.formatCount = formatCount
exports.formatDate = formatDate

 main.js

// 1.直接获取导出的对象, 从对象中获取属性
const util = require("./util.js")
 
console.log(util.UTIL_NAME)
console.log(util.formatCount())
console.log(util.formatDate())

//2.导入对象之后, 直接对其进行解构
const { 
  UTIL_NAME,
  formatCount, 
  formatDate 
} = require("./util.js")
 
console.log(UTIL_NAME)
console.log(formatCount())
console.log(formatDate())

????

 

foo.js

const name = "foo"
const age = 18
function sayHello() {
  console.log("sayHello")
}
 
// 1.在开发中使用的很少
// exports.name = name
// exports.age = age
// exports.sayHello = sayHello
 
// 2.将模块中内容导出
// 结论: Node导出的本质是在导出module.exports对象
// module.exports.name = name
// module.exports.age = age
// module.exports.sayHello = sayHello
 
// // console.log(exports.name, "----")
// // console.log(exports.age, "----")
// // console.log(exports.sayHello, "----")
// console.log(exports === module.exports)
 
// 3.开发中常见的写法
module.exports = {
  name,
  age,
  sayHello
}
 
// exports.name = "哈哈哈哈"
// module.exports.name = "哈哈哈哈"

 main.js

const foo = require("./foo.js")
 
console.log(foo.name)
console.log(foo.age)
foo.sayHello()

 

 

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

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

相关文章

SAP S4 Hana 下面ACDOCA 凭证行字段增强创建过程

网上找到这个类下面是可以新增增强的 现在需要在如下位置建立四代增强点 保存以后会出现下面的增强项 保存激活后,完成在源程序中增加了一个4代显式增强点.上面步骤只是在程序中建立了一个增强点,并没有执行什么动作,就相当于建立一个容器。如…

Python将Excel数字对应列的字母写成字典(json)

在日常的办公中,我们经常需要利用python去读写Excel类型的文件,有时候我们需要将每个数字代表的列的字母表现出来,那么我们可以利用Python实现,而且今天的代码可以根据自己的需求去任意的改变你想规定的长度 如,或者更长 a {1:…

1分钟搭建VPN服务器

1分钟搭建一个VPN服务器 VPN技术在保障网络通信安全和隐私上发挥着重要作用。IPsec VPN是其中一种常用的VPN模式。本文将介绍如何通过使用Docker来快速搭建IPsec VPN Server。 什么是IPsec VPN? IPsec即Internet Protocol Security,是一种用于保护互联…

「2024」预备研究生mem- 形式逻辑强化:逻辑的特殊文字表述方式(重点记忆)

一、形式逻辑强化:逻辑的特殊文字表述方式 二、课后题

关于torch.load报出找不到模型的错误,但路径明明正确

后来发现是因为使用 torch.save(model,save.pt) 会保存整个文件时会默认保存训练py文件的父目录,用torch.load导入文件时搜索路径必须有此父路径,否则将会提示no model named model这样的错误 解决办法是使用sys.path.apend把该父目录加入搜索路径中 …

Java开发 - 探寻Spring的秘密

前言 Spring是企业级J2EE一站式解决方案,提供了整个项目的表现层、业务层、持久层,而且,它的生态特别完善,可以和其他框架无缝对接,现在做Java的哪个项目里没有Spring的说出不去都不信。但往往我们开发者只重视项目是…

重定向:电商行业打败对手的杀手锏

重定向是一种在线营销策略,针对对产品或服务表示兴趣的潜在客户。可以追踪那些访问过您的网站、但未进行过消费的用户,再次向他们展示相关产品,激起消费欲。再营销则是可以追踪那些将商品加入网页购物车,但最后没有购买的用户&…

物流RFID设备一般在哪些场景应用?

随着现代物流行业的快速发展,传统条码技术信息量少,易脏污损毁,耐用性不高等问题很难满足物流企业多样化的需求,物流RFID设备的应用也越来越广泛。下面我们就跟大家一起来分析一下,物流RFID设备可以在哪些场景中应用。…

计算机体系结构基础知识介绍之动态调度(三)

首先回顾一下tomasulo算法, Tomasulo算法的第一个优点是分布式的冒险检测逻辑,这是通过使用预留站和公共数据总线实现的。预留站是一种存储指令和操作数的缓冲区,每个功能单元都有自己的预留站。公共数据总线是一种广播结果的方式&#xff0…

SpringBoot07:Thymeleaf模板引擎

目录 一、Thymeleaf 1、模板引擎 2、引入Thymeleaf 3、Thymeleaf分析 二、测试 1、编写一个TestController 2、编写一个测试页面welcome.html放在templates目录下 3、启动项目请求测试 三、Thymeleaf语法学习 1、修改测试请求,增加数据传输 2、要使用thy…

zabbix服务部署

文章目录 zabbix1 zabbix简介1.1 组成部件1.2 监控原理1.3 Zabbix 6.0新特性1.4 Zabbix6.0功能组件1.4.1 Zabbix Server1.4.2 数据库1.4.3 Web界面1.4.4 Zabbix Agent1.4.5 Zabbix Proxy1.4.6 Java Gateway 2 部署zabbix服务端2.1 部署Nginx2.2 安装PHP2.3 修改Nginx配置2.4 修…

Docker安装ElasticSearch7.14.0 docker安装elasticsearch7.14.0完整详细教程

Docker安装ElasticSearch7.14 docker安装elasticsearch7.14完整详细教程 Docker 上安装 ElasticSearch 7.14.0 的步骤:选择要安装的ElasticSearch 版本1、拉取 ElasticSearch 镜像2、创建并运行容器关闭容器启动容器重启容器 3、elasticsearch常用端口以及作用4、测…

耳夹式骨传导耳机测评!2023年最全耳夹骨传导耳机盘点

现在市面上的骨传导耳机品牌层出不穷,骨传导耳机好不好用,主要还是看耳机的品牌背景以及独家的音质技术调配,较大的骨传导耳机品牌在购买时售后以及使用体验上都具有一定的保障,下面就分享一些值得入手的骨传导耳机给大家吧~ 第一…

安装.net framework3.5 无法打开运行空间池,服务器管理器winRM插件可能已经损坏

解决方案: 1.以管理员权限打开命令提示符,然后运行如下命令: "reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f" 2.然后运行"winrm quickco…

玩转 TypeScript 中【class类】的定义与使用方法解读。

目录 类的概念类的继承 :类的存取器:类的静态方法与静态属性:类的修饰符:参数属性:抽象类:类的类型: 类的概念 类是用于创建对象的模板。他们用代码封装数据以处理该数据。JavaScript 中的类建立在原型上&a…

java.lang.NoSuchMethodError异常原因及解决办法

java.lang.NoSuchMethodError异常原因及解决办法 第一种简单的情况就是本类中需要调用的方法名称错误,这种情况就需要去检查方法名称是否正确,避免调用的方法和本类中的有相同的名称。 第二种情况就是jar包的问题 可能是jar包没有导入进来或者jar包导入…

HTTP第17讲——Cookie机制

Cookie的诞生背景 HTTP 是“无状态”的,这既是优点也是缺点。优点是服务器没有状态差异,可以很容易地组成集群,而缺点就是无法支持需要记录状态的事务操作。 后来发明的 Cookie 技术,给 HTTP 增加了“记忆能力”。 什么是Cookie…

图灵奖得主Geoffrey Hinton:我的五十年深度学习生涯与研究心法

本文介绍了Hinton非常坦诚地分享了自己的学术生涯,深度学习的未来和研究心得。 他从未正式上过计算机课程,本科在剑桥大学读的是生理学和物理学,期间曾转向哲学,但最终拿到的却是心理学方向的学士学位;他曾因为一度厌学…

在OK3588的Ubuntu系统上安装Firefox浏览器

文章目录 概要配置上网环境安装的具体命令 概要 因为Ubuntu系统里面没有安装浏览器,为了方便使用,提高工作效率,我们安装一下Firefox浏览器。 Firefox是一款适用于Ubuntu系统的免费和开源的Web浏览器。由Mozilla Foundation和其子公司Mozil…

818. 数组排序

链接: 链接 题目: 给定一个长度为 nn 的数组 aa 以及两个整数 ll 和 rr,请你编写一个函数,void sort(int a[], int l, int r),将 a[l]∼a[r]a[l]∼a[r] 从小到大排序。 输出排好序的数组 aa。 输入格式 第一行包含三个…