简单理解 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:/ ...
随机推荐
- Linux版本的项目环境搭建
项目环境docker及docker-compose文档 1.Linux环境介绍 centos7.6 16G以上内存空间(至少8G) 2.静态IP设置 1.找到配置文件 cd /etc/sysconfi ...
- 【freertos】012-事件标志概念和实现细节
目录 前言 12.1 实现事件机制的预备知识 12.1.1 守护任务 12.1.2 事件的不确定性 12.1.3 事件组的报文 12.2 事件概念 12.3 事件用途参考 12.4 事件实现原理简述 ...
- 字符串的操作、 Math类
字符串的操作 我们先来定义一个字符串,如果来进行过去长度,获取内容. 我们来写一个小测试! public static void main(String[] args) { String aa = & ...
- Node.js精进(5)——HTTP
HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种获取网络资源(例如图像.HTML文档)的应用层协议,它是互联网数据通信的基础,由请求和响应构成. 在 Node ...
- 抓包整理外篇fiddler————了解工具栏[一]
前言 抓包本篇还没写完,因为在工作中,发现有人用fiddler 用的还不是很好,所以去介绍一下这个东西,fiddler大体分为10多个章节. 正文 首先了解一下fiddler的抓包原理哈. 可以看到当 ...
- Web思维导图实现的技术点分析(附完整源码)
简介 思维导图是一种常见的表达发散性思维的有效工具,市面上有非常多的工具可以用来画思维导图,有免费的也有收费的,此外也有一些可以用来帮助快速实现的JavaScript类库,如:jsMind.KityM ...
- dolphinscheduler简单任务定义及复杂的跨节点传参
dolphinscheduler简单任务定义及跨节点传参 转载请注明出处 https://www.cnblogs.com/funnyzpc/p/16395094.html 写在前面 dolphinsc ...
- 【主流技术】Redis 在 Spring 框架中的实践
前言 在Java Spring 项目中,数据与远程数据库的频繁交互对服务器的内存消耗比较大,而 Redis 的特性可以有效解决这样的问题. Redis 的几个特性: Redis 以内存作为数据存储介质 ...
- 一种新的UI测试方法:视觉感知测试
什么是视觉测试 视觉测试(Visual Testing),主要检查软件用户界面(UI)是否正确显示给所有用户.它检查网页上的每个元素的形状.大小和位置是否符合预期,还检查这些元素是否在不同的设备和浏览 ...
- c:找到出现次数最多的递增数字串
如题,如何在一亿位整数组成的字符串中找到出现次数最多的递增数字串? 答案: #include <stdio.h> #include <string.h> #define MAX ...