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 就是集成一个个模块的打包工具,它基本上要完成的内容包括:

  1. 代码转换:TypeScript 编译成 JavaScript、SCSS 编译成 CSS 等。
  2. 文件优化:压缩 JavaScript、CSS、HTML 代码,压缩合并图片等。
  3. 代码分割:提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载。
  4. 模块合并:在采用模块化的项目里会有很多个模块和文件,需要构建功能把模块分类合并成一个文件。
  5. 自动刷新:监听本地源代码的变化,自动重新构建、刷新浏览器。
  6. 代码校验:在代码被提交到仓库前需要校验代码是否符合规范,以及单元测试是否通过。
  7. 自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统。

作用是什么

Webpack 会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。模块是分散,打包是集中。

假如你的项目中有一百个 .js 文件,Webpack 就把这些文件都打包成一个 .js 文件。

构建工具有 Webpack、Grunt、Gulp、Fis3、Rollup,以及 Vue 推出的 Vite 下一代构建工具。

最后

废话不多说,直接上手体验 Webpack 的魅力吧:搭建 Webpack 项目步骤

简单理解 Webpack,以及Web前端使用打包工具的原因的更多相关文章

  1. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

  2. 转 WEB前端性能分析--工具篇

    在线网站类: WebPageTest 说明: 在线的站点性能评测网站,地址http://www.webpagetest.org/ 补充: 其实这网站也是个开源项目,所以支持自己搭建一个内部的测试站点 ...

  3. Web前端开发必备工具推荐

    http://gaohaixian.blog.163.com/blog/static/12326010520114265223489/不管你做前端开发还是网页重构,前端工具都起着非常重要的作用,这里向 ...

  4. Brackets 1.8 开源+免费的Web前端网页文本编辑工具

    Brackets 1.8 开源+免费的Web网页文本编辑工具   -------------->> ---------------------- A modern, open source ...

  5. 各式 Web 前端開發工具整理

    程式碼編寫工具 (Coding Tools) 工作流程/建置/組合 (Workflow/Builds/Assemblers) lumbar brunch grunt lineman yeoman Ta ...

  6. 关于WEB前端开发的工具

    俗话说:"工谷善其事,先必利其器."一个用得顺手的工具,确实能为我们的开发带来方 便,更重要的是会让我们更加享受工具开发过程中所带来的乐趣. 1.编码工具: 记事本之类的编辑器都可 ...

  7. react纯前端不依赖于打包工具的代码

    ####react最基础的语法和不依赖环境的纯前端免编译代码 参照:http://www.ruanyifeng.com/blog/2015/03/react.html 注意事项:1.必须放倒服务器上, ...

  8. 前端项目打包工具weexpack的安装

    最下面是本人安装时候的系统环境,本篇文章只限于参考,不一定非得是这样,原因你懂得. 打包的过程中出现的问题 1.执行到weexpack run android的时候,到了resolving class ...

  9. web前端开发常用工具

    http://www.gbin1.com/technology/javautilities/20120806-resource-for-front-end-developer/ 冒泡样式 http:/ ...

随机推荐

  1. MTK 平台sensor arch 介绍-hal

    MTK 平台sensor arch 介绍-hal 一:整体框架 二:具体流程简介 AP-HAL: (1)init & control flow 我们以前文的originchannel 的 ac ...

  2. 跨域问题和使用 cookie 的限制

    前言 在我的文章 使用 cookie 的身份验证和授权 的最后,讲到了跨域问题,这篇文章就简单介绍跨域的相关知识,并说明在 net core 中怎么设置跨域. 使用的版本为 net6,并使用 Mini ...

  3. Nginx下fastcgi_split_path_info导致CodeIgniter配置问题

    Nginx下fastcgi_split_path_info导致CodeIgniter配置问题   突然发最近又有点懒散了,很久没有写东西了!今天谈点关于不是什么很新的问题,在nginx下配置ci框架时 ...

  4. 分享一个网上搜不到的「Redis」实现「聊天回合制」的方案

    前言 为什么说网上搜不到,因为关于聊天回合制的方案作者本人快把百度搜秃噜了也没找到,好在最终是公司一个关系不错的大佬帮提供了点思路,最终作者将其完整实现了出来. 分享出来大家可以收藏,万一你哪天也碰到 ...

  5. sap 调用Http 服务

    REPORT ZMJ_GETAPI. DATA: LEN TYPE I, "发送报文长度 LEN_STRING TYPE STRING, URL TYPE STRING, "接口地 ...

  6. React技巧之打开文件输入框

    原文链接:https://bobbyhadz.com/blog/react-open-file-input-on-button-click 作者:Borislav Hadzhiev 正文从这开始~ 总 ...

  7. Python+opencv打开修图的正确方式get

    先逼逼两句: 图像是 Web 应用中除文字外最普遍的媒体格式. 流行的 Web 静态图片有 JPEG.PNG.ICO.BMP 等.动态图片主要是 GIF 格式.为了节省图片传输流量,大型互联网公司还会 ...

  8. python实现人脸关键部位检测(附源码)

    人脸特征提取 本文主要使用dlib库中的人脸特征识别功能. dlib库使用68个特征点标注出人脸特征,通过对应序列的特征点,获得对应的脸部特征.下图展示了68个特征点.比如我们要提 取眼睛特征,获取3 ...

  9. vmstate 命令详解2022

    vmstat 是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过 vmstat 来发现系统中的瓶颈呢? 1. 使用vmstat 使用前我们先看下命令介绍及参数定义 Usag ...

  10. Day01 对前端的初步了解

    了解了工作性质以及流程 产品经理+UI+前端程序员+后端程序员+测试人员 了解了工作会做到的项目 pc端项目,后台管理系统,APP,小程序,移动端网页 了解了后续需要学到的课程 HTML+CSS Ja ...