Webpack原理与实战 --- 背景介绍

news2024/10/7 3:29:35

模块化的演进过程

Stage 1 - 文件划分方式

缺点:

  • 模块直接在全局工作,大量模块成员污染全局作用域;
  • 没有私有空间,所有模块内的成员都可以在模块外部被访问或者修改;
  • 一旦模块增多,容易产生命名冲突;
  • 无法管理模块与模块之间的依赖关系;
  • 在维护的过程中也很难分辨每个成员所属的模块。

Stage 2 – 命名空间方式
我们约定每个模块只暴露一个全局对象,所有模块成员都挂载到这个全局对象中

这种命名空间的方式只是解决了命名冲突的问题,但是其它问题依旧存在。

Stage 3 – IIFE
使用立即执行函数表达式(IIFE,Immediately-Invoked Function Expression)为模块提供私有空间。具体做法是将每个模块成员都放在一个立即执行函数所形成的私有作用域中,对于需要暴露给外部的成员,通过挂到全局对象上的方式实现。

这种方式带来了私有成员的概念,私有成员只能在模块成员内通过闭包的形式访问,这就解决了前面所提到的全局作用域污染和命名冲突的问题。

Stage 4 - IIFE 依赖参数
在 IIFE 的基础之上,我们还可以利用 IIFE 参数作为依赖声明使用,这使得每一个模块之间的依赖关系变得更加明显。

更为理想的方式应该是在页面中引入一个 JS 入口文件,其余用到的模块可以通过代码控制,按需加载进来。

模块化规范的出现

两点需求

  • 一个统一的模块化标准规范
  • 一个可以自动加载模块的基础库

在这里插入图片描述
在这里插入图片描述

模块化的标准规范

JavaScript 的标准逐渐走向完善
前端模块化规范的最佳实践方式也基本实现了统一:

  • 在 Node.js 环境中,我们遵循 CommonJS 规范来组织模块。
  • 在浏览器环境中,我们遵循 ES Modules 规范。

在这里插入图片描述

模块打包工具的出现
随着模块化思想的引入,我们的前端应用又会产生了一些新的问题

  • 首先,我们所使用的 ES Modules模块系统本身就存在环境兼容问题。尽管现如今主流浏览器的最新版本都支持这一特性,但是目前还无法保证用户的浏览器使用情况。所以我们还需要解决兼容问题。
  • 其次,模块化的方式划分出来的模块文件过多,而前端应用又运行在浏览器中,每一个文件都需要单独从服务器请求回来。零散的模块文件必然会导致浏览器的频繁发送网络请求,影响应用的工作效率。
  • 最后,谈一下在实现 JS 模块化的基础上的发散。随着应用日益复杂,在前端应用开发过程中不仅仅只有 JavaScript代码需要模块化,HTML 和 CSS 这些资源文件也会面临需要被模块化的问题。而且从宏观角度来看,这些文件也都应该看作前端应用中的一个模块,只不过这些模块的种类和用途跟 JavaScript 不同。

写在最后
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

自动化测试及典型开源的自动化测试工具

目录 前言: 自动化测试 自动化测试的意义 手工测试的局限性 自动化测试带来的好处 自动化测试的前提条件 自动化测试的方法 自动化测试的不足 自动化测试的应用方向 典型开源的自动化测试工具 前言: 自动化测试是一种使用软件工具和脚本来执行…

第二章——开始学习C++

进入C 首先介绍一个显示消息的简单C程序&#xff08;不同于以往的“Hello&#xff0c;world"&#xff09; #include<iostream> int main() {using namespace std;cout << "Come up and C me some time.";cout << endl;cout << "…

手机上无处不在的AI,原来还藏有这么多秘密

目录 一、AI在拍照中的应用 二、AI在日常生活中的应用 三、手机上AI的来自哪&#xff1f; 尽管2023年才过完了一半&#xff0c;但来自AI领域的科技震撼却没有要结束的意思。回顾过往&#xff0c;AI从没像今天这般那样受人瞩目&#xff0c;似乎一夜之间&#xff0c;它就成了新…

速览6月更新|EasyV产研团队带来产品功能优化

EasyV产研团队在6月份为您带来了一系列令人期待的产品功能优化&#xff0c;让数字化管理更加轻松高效&#xff01;话不多说&#xff0c;快来看看都有哪些新变化吧&#xff5e; 速览6月更新内容&#xff1a; 01 平台升级&#xff5c;工作台功能优化 02 模板上新&#xff5c;能…

LeetCode打卡 day58--单调栈

一个人的朝圣 — LeetCode打卡第58天 知识总结 Leetcode 739. 每日温度题目说明代码说明 Leetcode 496. 下一个更大元素 I题目说明代码说明 知识总结 单调栈的应用, 就是需要构建一个单调递增或者单调递减的栈, 去解决下一个大(小)的元素的问题 Leetcode 739. 每日温度 题目链…

网络安全面试题(含答案)

防范常见的 Web 攻击 什么是SQL注入攻击 攻击者在HTTP请求中注入恶意的SQL代码&#xff0c;服务器使用参数构建数据库SQL命令时&#xff0c;恶意SQL被一起构造&#xff0c;并在数据库中执行。 用户登录&#xff0c;输入用户名 lianggzone&#xff0c;密码 ‘ or ‘1’’1 &a…

JavaScript 之【事件循环】机制的深入浅出解读

前言&#xff1a; JavaScript 作为一种单线程的开发语言&#xff0c;在执行的时候会有特定的风格&#xff0c;本章节以 JS 单线程的特点为引入&#xff0c;详细分析讲解了 JS 的事件循环机制 目录 什么是【进程】什么是【线程】浏览器拥有哪些进程和线程【渲染主线程】的工作模…

冒泡排序(思路+代码)

冒泡排序&#xff1a; 变量&#xff1a; flag 如果没有交换过就终止循环就是flase&#xff0c;终止外层循环 第二层循环&#xff1a;n个数比较n-1次 第一层循环&#xff1a; 第一趟&#xff0c;比较n-1次 第二趟&#xff0c;比较n-2次 ... ... 代码&#xff1a; import…

展望“智”造未来|深眸科技以AI+机器视觉,夯基产业新发展格局

近日&#xff0c;2023昆山元宇宙国际装备展在昆山国际会展中心落下帷幕。展会期间&#xff0c;各大展商携新技术、新产品、新概念纷纷亮相&#xff0c;为现场参展观众和嘉宾呈现如梦似幻的元宇宙盛会。 此次展会&#xff0c;深眸科技认识了诸多工业元宇宙领域的优质产品及企业…

Spring Boot3入门快速体验-Developing Your First Spring Boot Application

一、进入Getting Started https://spring.io/ 点击Spring Boot点击LEARN,再点击Reference Doc.&#xff1a; 再点击Getting Started Introducing Spring Boot, System Requirements, Servlet Containers, Installing Spring Boot, and Developing Your First Spring Boot App…

前端Vue组件之仿京东拼多多领取优惠券弹出框popup 可用于电商商品详情领券场景使用

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。通过组件化开发&#xff0c;可以有效实现单…

痞子衡嵌入式:从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制。 我们知道配合 MCU 一起工作的存储器包含 ROM(Flash) 和 RAM 两类&#xff0c;前者主要放 RO 代码和数据&#xff0c;后者放 RW …

文件系统考古4:如何支持多个文件系统

Steve Kleiman 在 1986 年撰写了《Vnodes: An Architecture for Multiple File System Types in Sun UNIX》一文。这篇论文幅较短&#xff0c;大部分内容是数据结构的列举&#xff0c;以及 C 语言结构之间相互指向的图表。 Steve Kleiman是分布式文件系统领域的专家&#xff0c…

selenium 浏览器托管

selenium 浏览器托管&#xff0c;是启动一个浏览器&#xff0c;调试代码&#xff0c;可以运行当前调试代码&#xff0c;不用从启动浏览器开始从头执行 在谷歌浏览器chrome.exe 目录中打开cmd 输入下面目录&#xff0c;启动器浏览器 chrome.exe --remote-debugging-port9222 -…

cesium 控件 风格 白色 亮色 模式 组件变白

在要白色风格的控件的任意父级的class加上cesium-lighter即可, 如图黄色圈出来的

redis实现伪集群

主从复制配置 主从复制时只需要配置从库即可,其默认为主库模式. 打开 redis 客户端登录,使用命令 info replication 查看. 主从复制可以搭建真集群,也可以搭建伪集群 真集群就是有多台主机,每台主机 安装一个 redis.伪集群就是在一台主机上复制多份配置,修改其端口,运行多个…

ja3指纹

问题&#xff1a; 请求失效&#xff0c;带上抓包软件却可以->检测ja3浏览器指纹 方法&#xff0c;python 安装curl_cffi库 pip install curl_cffi 查看浏览器指纹 https://tls.browserleaks.com/json python 原生request 缺少两个指纹 使用curl_cffi之后 可以看到结果…

【计算机网络】第三章 数据链路层(可靠传输)

文章目录 第三章 数据链路层3.4 可靠传输3.4.1 可靠传输的基本概念3.4.2 可靠传输的实现机制——停止-等待协议3.4.2 可靠传输的实现机制——回退N桢协议3.4.3 可靠传输的实现机制——选择重传协议3.4.4 可靠传输的意义 第三章 数据链路层 3.4 可靠传输 可靠传输是指在数据通…

Java中可以使用哪些系统架构?怎样选择?

架构&#xff0c;又名软件架构&#xff0c;是有关软件整体结构与组件的抽象描述&#xff0c;用于指导大型软件系统各个方面的设计。 Java企业级的应用根据业务的复杂程度&#xff0c;通常使用的系统架构有应用架构、垂直应用架构、面向服务的架构(Service-Oriented Architectu…