Webpack学习 - 为什么要使用构建工具/什么是Webpack

JavaScript和CSS的依赖问题

在开发中,经常出现的一个问题,就是JavaScript和CSS的依赖问题。简单的说就是JavaScript和CSS的在页面中的顺序问题。经常会造成CSS没起作用,JavaScript的某个变量和方法找不到。
有很多情况都是因为引入JavaScript或者CSS的顺序不对,虽然我们可以使用一些RequireJS之类的模块管理,但是依然在很多情况下需要引入不同的文件,尤其是CSS没有一个好的模块化管理的组件。
那么我们就需要有一个统一的地方来管理JavaScript和CSS的顺序问题,而构建工具可以大大减少此类问题。

性能优化

一般浏览器请求的文件越多越耗时,请求的文件越大越耗时,尤其是为了前端项目的代码更清晰,结构更合理,我们采用了MVC,MVVM等很多架构分解出了很多JS文件,无疑又拖慢了网页的速度。为了解决这个问题,一般会采用以下两个方案:

1.文件合并
浏览器需要下载多个JS文件,而浏览器是有并发限制,也就是同时并发只能下载几个文件
假如浏览器并发数是5,你有30个JS文件,而每5个需要2S, 那么你光下载JS文件都需要12S
那么网页的性能可想而知,所以我们需要合并多个文件以减少文件的数量

2.文件压缩
我们知道文件越大,下载越慢,而针对JavaScript和CSS,里面的空格,换行这些都是为了让我们读代码时更容易阅读,但是对机器来说,这些对它没有影响。 所以为了减少文件大小,一般的情况我们都会用工具去掉空格和换行,有时候我们还会用比较短的变量名(这个要让工具最后压缩时做,而源代码一定要保证命名可读性) 来减少文件大小。
而所有的前端构建工具都具有文件合并和压缩的功能
提高开发效率

Vendor前缀

在CSS3使用越来越多的时候,我们都知道一些CSS3的新特性,在不同的浏览器中,CSS有不同的前缀,如果我们手工添加将会很繁琐,而如果使用构建工具,很多构建工具可以自动给我们添加CSS的Vendor前缀

单元测试

JavaScript的单元测试在使用MVC或者MVVM的框架后,变得越来越容易,而单元测试是质量保证的一个很重要的手段,所以在提交之前,使用构建工具自动跑一遍我们的单元测试是非常有必要的,能进一步检测你的项目的健壮性和容错能力。

代码分析

我们写的JavaScript很多时候会有一些潜在的bug,  比如忘了添加分号,某个变量没有等等,使用一些JavaScript的代码分析工具,可以很好的帮我们检查一些常见的问题。

版本升级

比如第一版本使用npm之类来引用前端JavaScript和CSS的第三方库,那么如果版本升级,添加移除等都用手工来修改HTML的话,一来耗时二来容易出错,尤其是开发版本和生产版本之间切换会有很多问题,那么使用前端构建工具可以很好的解决这些问题。

常见的前端构建工具:Gulp、Grunt、Webpack

什么是webpack?

webpack是前端的一个项目构建工具,它是基于 Node.js 开发出来的一个前端工具。

WebPack可以看做是模块打包机(bundler)。它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用
在webpack的概念中,前端的所有资源文件(js/css/json/img/sass/less/...)都会作为模块来被处理,webpack会根据模块的依赖关系进行静态分析,生成对应的静态资源,最终打包部署上线。


WebPack、Grunt、Gulp

1. 区别
Gulp/Grunt是一种能够优化前端的开发流程的工具,是基于 task 任务的。
WebPack是一种模块化的解决方案,是基于整个项目进行构建的。
不过Webpack的优点使得Webpack在很多场景下可以替代Gulp/Grunt类的工具

2. Grunt和Gulp的工作方式
在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,工具之后可以自动替你完成这些任务。

3. Webpack的工作方式
把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。

loader

webpack本身只能加载js/json模块,如果要加载其它类型的文件/模块, 就需要使用对应的loader进行转化和加载
loader 可以将所有类型的文件转换为webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。
loader自身也是运行在node.js环境中的JavaScript模块,其本身是一个函数,接收源文件作为参数,返回转化的结果。
loader一般以 xxx-loader 的方式命名,xxx代表了这个loader要做的转化功能,比如:css-loader,json-loader等。

插件

loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务
插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。
插件接口功能极其强大,可以用来处理各种各样的任务。

插件和loader的区别

插件可以完成一些loader不能实现的功能;
1.使用插件一般在webpack的配置信息plugins选项中指定
2.UglifyJSPlugin:  压缩js文件
3.HtmlWebpackPlugin:  自动生成HTML文件
4.CleanWebpackPlugin:  自动清除指定文件夹资源 

发布了59 篇原创文章 · 获赞 13 · 访问量 2511

猜你喜欢

转载自blog.csdn.net/qq_40885085/article/details/103633739
今日推荐