js模块化

news2024/9/23 9:23:25

第1章:模块化入门

1.1.理解什么是模块

  1. 将一个复杂的程序依据一定的规则拆分成单个文件,并最终组合在一起
  2. 这些拆分的文件就是模块,模块内部数据是私有的,只是向外部暴露一些方法与外部其它模块通信

1.2.为什么要模块化?

  1. 降低复杂度,提高解耦性
  2. 避免命名冲突
  3. 更好的分离,按需加载
  4. 更高复用性,高可维护性

1.3模块化概念带来的问题

  1. 请求过多
  2. 依赖模糊
  3. 难以维护

第2章:模块化规范

前言:一个大的项目必定会使用模块化技术,使用模块化就会使用相应的模块化规范,现在比较流行的模块化规范有以下2种: CommonJS、ES6e

2.1.CommonJS

2.1.1规范

  1. 官网: http://wiki.commonjs.org/wiki/Modules

  2. 每个文件都是一个模块。

  3. CommonJS模块化的代码既可在服务端(node)运行,也可在浏览器(browser浏览器)端运行。(es6模块化只能写浏览器端)

  4. 服务器端:模块化的代码可直接运行。

  5. 浏览器端:模块化的代码要经过 Browserify (http://browserify.org)编译(类比:es6的箭头函数不能直接被浏览器所识别,需要借助babel编译)。

2.1.2基本语法

1.暴露语法:

  1. 第一种方式: module.exports = value

  2. 第二种方式: exports.xxx = value

2. 引入语法:

  1. 引入第三方模块:require(xxx),xx为模块名

  2. 引入自定义模块: require(xxx),xxx为模块文件路径

3.备注:内置关系

在这里插入图片描述

验证:module.exports == exports

在这里插入图片描述

module.exports使用示例

module1.js使用module.exports语法,暴露出一个对象。app.js中引入该暴露的对象,并使用

module1.js


/* 
	module1使用module.exports = xxxx 去暴露,xxx就是暴露的内容
*/
//没有暴露data和msg(被保护了)
const data = 'atguigu'
const msg = 'hello'

module.exports = {
	showData (){
		console.log(data);
	},
	showMsg(){
		console.log(msg);
	}
}

app.js

// 暴露的本质是module.exports的内容
// 引入的内容是什么,取决于暴露的是什么
const m1 = require('./module1') //引入自定义模块
m1.showData()
m1.showMsg()

exports使用示例

module2.js使用exports语法,往暴露的对象中添加属性。app.js中引入该暴露的对象,并使用

module2.js

/* 
	module2使用exports.xxxxx = value 去暴露,value就是暴露的内容,xxxxx是他的名字
  (注意:module.exports和exports不能混用,若混用了,以module.exports
         其实,最终暴露的对象,只认module.exports,只不过刚开始exports的引用初始值就被赋值为module.exports了)
*/

exports.data  = 'atguigu2'
exports.msg = 'hello2'

exports.sum = function (a,b){
	console.log(a+b);
}

exports.sub = function (a,b){
	console.log(a-b);
}

app.js

const m2 = require('./module2') //引入自定义模块
const m22 = require('./module2') //引入自定义模块

console.log(m2==m22) // true

console.log(m2.data);
console.log(m2.msg);
m2.sum(1,2)
m2.sub(3,4)

第三方模块使用示例

第一步

npm init --yes,在当前文件夹中,初始化包管理配置(会生成package.json文件,安装包时,会将包安装在当前文件的node_modules文件夹中)
(当使用require引入第三方模块时,会先从当前文件夹中寻找node_modules文件夹,并从中找到对应的模块,如果没找到,则会到当前文件夹的父文件夹中寻找node_modules文件夹,并从中找到对应的模块)

第二步

npm install uniq,安装uniq包

第三步

引入,并使用

// app.js
const uniq = require('uniq') // 引入第三方模块模块(只需要写模块名)
const arr = [1,3,3,4,2,5]
console.log(uniq(arr));

2.1.3 commonJs在浏览器使用

引入问题

浏览器并不能识别commonJs模块化的语言,需要使用browserify来编译之后,才能被浏览器使用,browserify官网:https://browserify.org/。

//<module1.js>
const data = 'atguigu'
const msg = 'hello'

module.exports = {
	showData (){
		console.log(data);
	},
	showMsg(){
		console.log(msg);
	}
}

// <app.js>
const m1 = require('./module1') // 引入自定义模块
const uniq = require('uniq')    // 引入第三方模块

m1.showData()
m1.showMsg()
const arr = [1,3,3,4,2,5]
console.log(uniq(arr));

// <index.html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>Document</title>
	</head>
	<body>
		<!-- 直接引入app.js,将不可用,因为app.js使用了CommonJs模块化语法,浏览器并不能识别 -->
		<script type="text/javascript" src="./app.js"></script>
	</body>
</html>

browserify使用

首先需要安装browserify

# 全局安装
npm i browserify -g 

编译指定文件

browserify ./app.js -o ./build.js

在index.html中引入build.js

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>Document</title>
	</head>
	<body>
		<script type="text/javascript" src="./build.js"></script>
	</body>
</html>

2.2 ES6模块化规范

2.2.1规范

  1. 每个文件都是一个模块。

  2. 要借助 Babel(ES6代码编译成ES5的代码,jsx语法转为js)和Browserify依次编译代码,才能在浏览器端运行。

  3. Babel中文网: https://www.babeljs.cn/

2.2.2基本语法

1. 暴露模块:

  1. 分别暴露: export 暴露内容

  2. 统一暴露: export {暴露内容1,暴露内容2}

  3. 默认暴露: export defalut 暴露内容

2. 引入模块:

  1. 方法1: import {xxx,yyy} from ‘./module1’

  2. 方法2: import module3 from ‘./module3’

3.使用规则:

  1. 若使用分别暴露、统一暴露的方式暴露内容,那么就要用方法1引入。

  2. 若使用默认暴露的方式暴露内容,那么就要用方法2引入。

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

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

相关文章

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java网络游戏虚拟交易平台8rfnp

计算机毕业设计的编程真的不会, 应该怎么办啊, 平时学了3年都没学懂&#xff0c;然而还有一个月就要答辩了&#xff0c;一点东西都没做出来&#xff0c;不知道该怎么办了&#xff1f;好迷茫&#xff0c;如果毕不到业怎么办, 有没有快速的学习方法 毕设毕设&#xff0c;最终的是…

【软件测试】10年测试老鸟,告诉你测试内功修炼之道......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 一名测试人员&#…

Docker[2]-docker的组成与卸载

1.5 Docker的基本组成 1.5.1 镜像(image) Docker 镜像&#xff08;Image&#xff09;就是一个只读的模板。镜像可以用来创建 Docker 容器&#xff0c;一个镜像可以创建很多容器。 docker面向对象容器对象镜像类 1.5.2 容器(container) Docker 利用容器&#xff08;Container&a…

一文读懂如何让网页变灰白色(黑白色)

文章目录1. 文章引言2. 实现方法2.1 修改CSS文件2.2 修改html标签2.3 修改body标签2.4 使用grayscale.js插件1. 文章引言 有段时间&#xff0c;我们打开知名的网页&#xff0c;发现全部变成黑白色了&#xff0c;如下图所示&#xff1a; 一般在清明节&#xff0c;全国哀悼日&am…

学会这些C语言技巧,你的编程能力大大提升

一、函数指针 在讲回调函数之前&#xff0c;我们需要了解函数指针。 我们都知道&#xff0c;C语言的灵魂是指针&#xff0c;我们经常使用整型指针&#xff0c;字符串指针&#xff0c;结构体指针等 int *p1; char *p2; STRUCT *p3; //STRUCT为我们定义的结构体 但是好像我们…

PCB设计总有几个阻抗没法连续的地方。

罗永浩所说“人生总有几次踩到大便的时候”&#xff0c;PCB设计也总有阻抗不能连续的时候。 特性阻抗&#xff1a;又称“特征阻抗”&#xff0c;它不是直流电阻&#xff0c;属于长线传输中的概念。在高频范围内&#xff0c;信号传输过程中&#xff0c;信号沿到达的地方&#xf…

canal springboot 入门

Alibaba canal(官方文档链接) 简介 canal [kə’nl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署&#xff0c;存在跨机房同步的业务需求&#xff0c;实现方…

转行编程语言该怎么选择?小扎给你安排上

编程语言的发展 ​ 编程语言到目前为止&#xff0c;经历了三个发展阶段&#xff0c;机器语言&#xff0c;汇编语言、高级语言。在高级语言中&#xff0c;又可以分为面向过程语言以及目前最为广泛流传的面向对象语言。 机器语言 ​ 第一代计算机语言称为机器语言。机器语言就是…

stm32cubemx hal学习记录:FreeRTOS中断管理

一、参数配置 1、配置RCC、USART1、时钟84M 2、配置SYS&#xff0c;将Timebase Source修改为除滴答定时器外的其他定时器。 3、初始化LED的两个引脚、两个按键引脚 4、开启FreeRTOS&#xff0c;v1与v2版本不同&#xff0c;一般选用v1即可 5、创建一个队列 6、创建两个线程…

正大国际期货:外盘黄金期货怎么做,需要注意什么?

无论你是刚入外盘黄金期货市场的新手小白&#xff0c;还是已经入黄金市场多年的老手&#xff0c;必须知道外盘黄金期货交易的技巧及规则&#xff0c;这样才可以在黄金期货市场中站稳脚跟&#xff0c;才能收获更多的利益。下面正大IxxxuanI就为大家准备了一些黄金交易技巧以供参…

太阳能发电与蓄电池研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

汇编语言程序设计入门

目录 基本概念 符号指令中的表达式 符号 数值常量 符号常量&#xff08;用的很少&#xff09; 数值表达式 标号&#xff08;一般出现在代码段&#xff09; 程序框架 ​编辑 标号的定义 变量&#xff08;最重要) 变量的属性​编辑 变量存储区中数据的存放​编辑 变量…

最受欢迎的Python科学类库

作为一种免费的&#xff0c;跨平台的&#xff0c;通用的和高级的编程语言&#xff0c;Python已被科学界广泛采用。科学家重视Python的精确和有效的语法&#xff0c;相对平坦的学习曲线以及它与其他语言&#xff08;例如C / C &#xff09;很好地集成的事实。 由于这种流行&…

最近沉迷Redis网络模型,无法自拔!终于知道Redis为啥这么快了

1. 用户空间和内核态空间 1.1 为什么要区分用户和内核 服务器大多都采用 Linux 系统&#xff0c;这里我们以 Linux 为例来讲解: ubuntu 和 Centos 都是 Linux 的发行版&#xff0c;发行版可以看成对 linux 包了一层壳&#xff0c;任何 Linux 发行版&#xff0c;其系统内核都…

设计模式-day03

5&#xff0c;结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“…

项目管理(如何进行项目风险管理)

项目风险管理包括规划风险管理、识别风险、开展风险分析、规划风险应对、实施风险应对和监 督风险的各个过程。项目风险管理的目标在于提高正面风险的概率和(或)影响,降低负面风险的 概率和(或)影响,从而提高项目成功的可能性。 项目风险分类: 1、概率性风险(能识别并确…

【虹科】工业相机如何自动优化图像?

普通的消费网络相机操作简便&#xff0c;常常也会用于一些机器视觉应用。然而&#xff0c;我们很容易就可以意识到&#xff0c;与典型的工业相机相比&#xff0c;虽然网络相机价格诱人&#xff0c;但是在质量、耐用性和长期可用性方面存在显著劣势。和网络相机一样简单易用的工…

【正点原子FPGA连载】第三十一章DDR4读写测试实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三十一章DDR4读…

Google Indexing API 推送 (避免踩坑)

https://developers.google.com/search/apis/indexing-api/v3/prereqs?hlen_GB 官方文档 1. 在创建服务账号部分需要注意的是&#xff1a; 第二步授权要把服务账号的邮箱地址加上2. 验证完网站站长之后需要注意的点 a. https://search.google.com/search-console/settings 进入…

Redis数据持久化机制(备份恢复)、缓存淘汰策略、主从同步原理、常见规范与优化详解

一. 数据持久化 1. 含义 Redis 提供了 RDB 和 AOF 两种持久化方式&#xff0c;默认开启的是RDB&#xff0c;如果需要AOF&#xff0c;需要手动修改配置文件进行开启。 RDB&#xff1a;是一种对Redis存在内存中的数据周期性的持久化机制&#xff0c;将内存中的数据以快照的形式硬…