简单理解 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:/ ...
随机推荐
- SpringCloud 服务治理
目录 1. Eureka 1.1 Eureka 介绍 1.2 Eureka 快速入门 父工程 Eureka Server(子工程) pom.xml 启动类 application.yml Eureka ...
- 使用PowerShell下载文件
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月12日. 使用Invoke-WebRequest指令下载文件 [Net.ServicePointManager]::Securit ...
- Linux 安装Apche服务
用yum 进行在线安装apche服务 yum install -y httpd 我这边是centos7 需要开启一下端口: 1 firewall-cmd --zone=public --add-por ...
- Nacos 的安装与服务的注册
Nacos 的安装与服务的注册 我们都知道naocs是一个注册中心,那么注册中心是什么呢? 什么是注册中心? 它类似与一个中介角色(不收费的良心中介), 在微服务中起纽带的作用,它提供了服务和服务地址 ...
- HelloWord程序代码的编写和HelloWord程序的编译运行
1.新建文件夹,存放代码 2.新建一个Java文件 文件后缀名.java(Hello.java) 3.编写代码public class Hello{public static void main(St ...
- Windows JDK 的下载与安装
Java Development Kit 简称 JDK,任何需要开发 Java 程序的环境都需要进行安装 JDK. JDK 下载地址:https://www.oracle.com/java/techn ...
- 2018 CSP-J 初赛解析
做题记录与答案 今天这个做的是真的烂,60分,妙极了(微笑 可以看看人家的解析 选择: 选择好多不太懂的,一个个的来解析 先分析一下选择的知识点: 计算机基础 :T1.T3.T4.T5.T8 进制转换 ...
- [ZJCTF 2019]NiZhuanSiWei 1
考察知识点:反序列化.php伪协议 1.打开之后获得源码信息,如下: <?php $text = $_GET["text"]; $file = $_GET["fil ...
- Kafka启动遇到ERROR Exiting Kafka due to fatal exception (kafka.Kafka$) 解决办法 从kafka的根目录启动 bin/kafka-server-start.sh config/server.properties
Mysql配置读写数据库 ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) fo ...
- 从工程师到技术leader思维升级
身处职场之中,太多话题相围绕,"个人成长"."管理"或许是讨论的最多的了. 但"个人成长"和"管理"却是大不相同的两件事 ...