当前位置: 首页 > Web前端 > HTML

什么是网页包?

时间:2023-03-29 11:56:22 HTML

作者|慕课网精英讲师三水清随着Web前端的不断发展,传统的Web开发正逐渐向WebApplication(简称WebAPP)的开发模式转变,页面也越来越复杂。复杂的应用场景必然导致技术进步,新的技术手段不断涌现,解决现有问题。前端模块化和工程化的呼声越来越高。随着前几年流行的Grunt、Gulp、FIS等构建工具的发展,带动了一股前端工程的热潮。近年来,经过React和Vue这些年库的扩充,大型webapp不再局限于手写jQuery来操作DOM,让大型webapp有了全新的开发体验。在这个过程中,前端逐渐发展成以模块化、单页应用(single-pageapplication,简称SPA)为主的形式。随着这种形式以及React和Vue等库的流行,Webpack越来越受欢迎。作为主流构建工具。模块化说起Webpack,大家都知道这是一个模块化的构建工具,那么模块化到底是什么?模块化是指在解决一个复杂问题时,将系统从上到下逐层划分为若干个模块的过程。有多种属性,分别反映其内部特征。(百度百科)模块化越来越多地应用到我们的日常生活中。在我的印象中,小时候家电(比如收音机、电视机)坏了,就拿着去商店找师傅修理。现在家电都是模块化的,检测坏了就换一个新的模块就可以了。可见,模块化不仅仅是一个前端的概念,在我们的生活场景中也有很多模块化。模块化使我们的生活更轻松。更高的效率。前端模块化一般指的是JavaScript模块,最常见的是Nodejs的npm封装,每个模块可能是最小的甚至是最优的代码组合,也可能是由很多具体的模块组成解决某些问题的大模块。如果没有模块化,抄袭可能是你写代码时最常遇到的事情。当我们需要某个功能的代码的时候,我们可以查看之前的哪个工程写过,如果写过,就复制过来。如果副本太多,代码的可维护性自然会下降。将代码模块化之后,我们考虑的更多:代码使用和维护成本的问题。所以模块化的规范有很多:CommonJS、AMD和ES6Module规范(另外还有CMD、UMD等),下面我们简单的看一下:CommonJS:是Nodejs广泛使用的一套模块化规范,以及它是一种同步加载模块依赖的方式;require:引入一个模块exports:导出模块内容module:模块本身AMD:是JS模块加载库RequireJS提出并改进的一套模块化规范,AMD是一种异步加载模块依赖的方式;id:Module'siddependencies:模块依赖factory:模块的工厂函数,即模块的初始化操作函数require:importmoduleES6Module:ES6引入的一套模块化规范。import:导入模块依赖export:模块导出Tips:除了以上三种主流规范外,还有CMD(国内库SeaJS提出的一套模块规范)和UMD(兼容CommonJS和AMD的一套规范).目前大部分模块的封装都可以在Node.js环境和Web环境下运行,所以普遍采用UMD规范。后面Webpack会进一步引入lib库的封装。除了JavaScript的模块化,还可以在CSS样式中使用@import引入自己的依赖模块:@import'reset.css';在一些CSS预处理语言如Less或Sass中,@import也可以用来导入一些变量、函数和mixins的定义。Tips:你可能也经常听到组件化这个词。模块化一般是指可以抽象和封装的最小/最优代码集。模块化解决了功能耦合问题;组件化更像是模块化。封装,根据业务特点或不同场景,封装出一个具有一定功能特性的独立整体;另外,前端提到的组件化,更多的是UI组件,有模板,有样式,有JS交互。关于模块化开发相关的内容,我们会在“Webpack模块化开发”部分继续详细介绍。工程当我们开发的web应用越来越复杂时,我们会发现我们面临的问题会逐渐增多:模块过多时如何管理依赖?页面复杂度增加后,多页面、多系统、多状态怎么办?团队扩大后,团队合作呢?多人研发中如何解决性能、代码风格等问题?如何平衡研发效率和产品迭代?这些都是软件工程需要解决的问题。工程问题需要借助工程工具来解决。得益于Nodejs的发展,前端这些年在工程上取得了不错的成绩。早期的前端工程,主要是基于Grunt、Gulp等构建工具。这个阶段解决了重复任务的问题。他们把某些功能拆解成固定步骤的任务,然后写工具来解决,比如:图片压缩、地址加哈希、替换等,都是固定套路的重复性任务。Webpack现阶段更像是从解决JavaScript模块化依赖打包开始,利用强大的插件机制逐步解决前端资源依赖管理问题,并依托社区力量逐步演化成一套前端工程解决方案。什么是网页包?本质上,Webpack是现代JavaScript应用程序的静态模块打包器。当Webpack处理您的应用程序时,它会在内部创建一个依赖关系图,映射到您的项目所需的每个模块,然后将所有这些依赖关系生成一个或多个包。webpack解决什么问题?Webpack可以做按需加载。对于Grunt、Gulp这样的构建工具,打包的思路是:遍历源文件→匹配规则→打包。在这个过程中,无法实现按需加载,即对于打包后的资源,无论页面在打包过程中是否被使用。Webpack与其他构建工具的本质区别在于,Webpack从入口文件开始,通过模块依赖加载、解析、打包三个过程完成项目的构建。在加载、分析、打包这三个过程中,可以有针对性地采用一些解决方案来达到按需加载的目的,比如代码拆分(拆分公共代码等)。当然,Webpack也可以轻松解决传统构建工具所解决的问题:模块化打包,一切都是模块,JS是模块,CSS等也是模块;语法糖转换:如ES6转ES5、TypeScript;预处理器编译:如Less、Sass等;项目优化:如压缩、CDN;解决方案打包:通过强大的Loader和插件机制,完成解决方案打包,如PWA;流程对接:如测试流程、语法检测等。总结本文从Web前端的发展入手,介绍了模块化、工程化的概念和发展现状,最后介绍了Webpack的应用场景,以及为什么会有Grunt、Gulp等传统构建工具,以及社区生成Webpack。工具。