简单理解 Webpack,以及Web前端使用打包工具的原因
Java 中的模块
传统的前端开发就是 JS、HTML、CSS 三件套。Web 没有像 Java 一样拥有优秀的模块机制,就是类与类之间可以分装在不同的包下,不同包下的类互相引用时通过import导入即可。模块之间的类名不会发生冲突。你可以把模块想象是一个平行世界,平行世界之间如果要互通就打开一道时空之门(import)来进行链接。
下面是两个不同包里的相同类名的类:
package demo.a;
class DemoA {}
package demo.b;
class DemoA {}
在 package demo.test 中,我们创建一个 Test 类。入口函数中创建了两个相同类名(ClassA)的对象。第一个 ClassA 是通过 import 语句导入了 demo.a.ClassA;第二个 ClassA 则是在类名前加上包名地址的 ClassA。模块让我们类名、变量都不冲突:
package demo.test;
import demo.a.ClassA;
public class Test {
public static void main(String[] args) {
ClassA a = new ClassA();
demo.b.ClassA b = new demo.b.ClassA();
}
}
Web 中的模块
没有模块的问题
回到标题一当中最开头说的,Web 有 JavaScript、HTML、CSS,这些文件不存在模块,互相导入的机制。虽然 HTML 可以通过标签引入这些文件,但是不存在独立空间的东西。把 js 代码拆分一个个 .js 文件,再通过 <script> 标签依次引入,这样会导致“变量污染”等问题,变量冲突问题也非常频繁。
下面分别是不同文件夹之下的同名文件,其实不同民文件,只要是相同的变量名就会引发变量污染:
demo/a/ClassA.js:
let a = 10;
demo/b/ClassA.js:
let a = 100;
<script src="../a/ClassA.js"></script>
<script src="../b/ClassA.js"></script>
控制台直接报错误:Uncaught SyntaxError: Identifier 'a' has already been declared (at ClassA.js:1:1)。说的是,变量名 a 已经被声明了。
Node.js 模块
现如今,基于 Node.js,Web 有了模块机制,也可以像 Java 那样使用模块,每一个文件都是一个独立的空间,相同的变量名只要不是在一个模块中就不会发生“变量污染”的问题。
模块引用复杂
Web 的资源非常复杂,有 JavaScript 文件、CSS 文件、HTML 文件,以及其他媒体文件。这些文件互相存在引用关系,如下图:

Webpack 就是集成一个个模块的打包工具,它基本上要完成的内容包括:
- 代码转换:TypeScript 编译成 JavaScript、SCSS 编译成 CSS 等。
- 文件优化:压缩 JavaScript、CSS、HTML 代码,压缩合并图片等。
- 代码分割:提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载。
- 模块合并:在采用模块化的项目里会有很多个模块和文件,需要构建功能把模块分类合并成一个文件。
- 自动刷新:监听本地源代码的变化,自动重新构建、刷新浏览器。
- 代码校验:在代码被提交到仓库前需要校验代码是否符合规范,以及单元测试是否通过。
- 自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统。
作用是什么
Webpack 会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。模块是分散,打包是集中。

假如你的项目中有一百个 .js 文件,Webpack 就把这些文件都打包成一个 .js 文件。
构建工具有 Webpack、Grunt、Gulp、Fis3、Rollup,以及 Vue 推出的 Vite 下一代构建工具。
最后
废话不多说,直接上手体验 Webpack 的魅力吧:搭建 Webpack 项目步骤
简单理解 Webpack,以及Web前端使用打包工具的原因的更多相关文章
- 细说前端自动化打包工具--webpack
背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...
- 转 WEB前端性能分析--工具篇
在线网站类: WebPageTest 说明: 在线的站点性能评测网站,地址http://www.webpagetest.org/ 补充: 其实这网站也是个开源项目,所以支持自己搭建一个内部的测试站点 ...
- Web前端开发必备工具推荐
http://gaohaixian.blog.163.com/blog/static/12326010520114265223489/不管你做前端开发还是网页重构,前端工具都起着非常重要的作用,这里向 ...
- Brackets 1.8 开源+免费的Web前端网页文本编辑工具
Brackets 1.8 开源+免费的Web网页文本编辑工具 -------------->> ---------------------- A modern, open source ...
- 各式 Web 前端開發工具整理
程式碼編寫工具 (Coding Tools) 工作流程/建置/組合 (Workflow/Builds/Assemblers) lumbar brunch grunt lineman yeoman Ta ...
- 关于WEB前端开发的工具
俗话说:"工谷善其事,先必利其器."一个用得顺手的工具,确实能为我们的开发带来方 便,更重要的是会让我们更加享受工具开发过程中所带来的乐趣. 1.编码工具: 记事本之类的编辑器都可 ...
- react纯前端不依赖于打包工具的代码
####react最基础的语法和不依赖环境的纯前端免编译代码 参照:http://www.ruanyifeng.com/blog/2015/03/react.html 注意事项:1.必须放倒服务器上, ...
- 前端项目打包工具weexpack的安装
最下面是本人安装时候的系统环境,本篇文章只限于参考,不一定非得是这样,原因你懂得. 打包的过程中出现的问题 1.执行到weexpack run android的时候,到了resolving class ...
- web前端开发常用工具
http://www.gbin1.com/technology/javautilities/20120806-resource-for-front-end-developer/ 冒泡样式 http:/ ...
随机推荐
- Vmware虚拟机安装及相关配置流程
1.Vmware虚拟软件安装 1.1下载地址 vmware 12 pro 的版本稳定性较好,所有我们最好选择该版本 下载地址:https://www.onlinedown.net/soft/10053 ...
- 最短路之 Dijkstra 算法
普通的 Dijkstra 这是一种运用贪心的单源最短路算法,就是求从一个节点出发,到任意一个点的最短距离 首先我们要一个图 假设要求从 1 开始的单源最短路 dis[] 表示最短路数组, vis[] ...
- 【Java面试】请你简单说一下Mysql的事务隔离级别
一个工作了6年的粉丝,去阿里面试,在第一面的时候被问到"Mysql的事务隔离级别". 他竟然没有回答上来,一直在私信向我诉苦. 我说,你只能怪年轻时候的你,那个时候不够努力导致现在 ...
- 基于Kubernetes v1.24.0的集群搭建(一)
一.写在前面 K8S 1.24作为一个很重要的版本更新,它为我们提供了很多重要功能.该版本涉及46项增强功能:其中14项已升级为稳定版,15项进入beta阶段,13项则刚刚进入alpha阶段.此外,另 ...
- 使用 Dapr JS SDK 让 Nest.js 集成 Dapr
Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架. Dapr 中文手册:ht ...
- 02 RESTFul接口和HTTP的幂等性分析
RESTFul接口和HTTP的幂等性分析 REST全称是Representational State Transfer,中文为表述性状态转移,REST指的是一组架构约束条件和原则 RESTful表述的 ...
- JavaScript产生随机颜色
//获取rgb类型的颜色 IE7不支持 function randomColor(){ var r = Math.floor(Math.random()*256); var g = Math.floo ...
- React中setState方法说明
setState跟新数据是同步还是异步? setState跟新数据是异步的. 如何用代码表现出来是异步的. 点击按钮更新数据,然后去打印这个值看一下 setState跟新数据是异步的 class Fa ...
- PotPlayer播放百度云盘视频
需要的工具 PotPlayer.油猴tampermonkey.坚果(这个不用下载,有个账号就行) 下载地址:百度网盘 步骤 安装油猴tampermonkey 拖拽Tampermonkey_4.14.c ...
- sql-删除重复数据-oracle
删除重复数据 准备重复数据 create table mystudent ( stuno number , stuname varchar2(20), stuage number ); insert ...