三者都是前端构建工具,grunt和gulp在早期比较流行,现在webpack相对来说比较主流,不过轻量化的任务还是会用gulp来处理,比如单独打包CSS文件等
grunt和gulp是基于任务和流(Task、Stream)的,类似jQuery,找到一个(或一类)
文件,对其做一系列链式操作,更新流上的数据,整条链式操作构成一个任务,,多个任务就构成了整个web的构建流程
webpack是基于入口,会自动地递归解析入口所需要加载的所有资源文件,然后用不同的Loader来处理不同的文件,用Plugin扩展webpack功能
总结:
从构建思路上来说
从知识背景来说
同样是基于入口打包工具还有以下几个主流的:
webpack、 rollup、 parcel
webpack适用于大型复杂的前端站点构建
rollup适用于基础库的打包,如:vue、react
parcel适用于简单的实验性项目,满足低门槛的快速看到效果(打包过程中给出的调式信息十分有限,一旦打包出现错误难以调试,所以不建议复杂项目使用parcel)
file-loader:把文件输出到另一个文件中,在代码中通过相对URL去引用输出文件
url-loader:和file-loader类似,但是能在文件很小的情况下以base64的方式把文件内容注入到代码中去
source-map-loader:加载额外的source Map 文件,以方便断电调试
image-loader:加载并压缩图片文件
babel-loader: 把ES6转成ES5
css-loader:加载CSS,支持模块化、压缩、文件导入等特性
style-loader:把CSS代码注入到JavaScript中,通过DOM操作去加载CSS
eslint-loader:通过ESLint检查JavaScript代码
define-plugin:定义环境变量
Commons-chunk-plugin:提取公共代码
uglify-webpack-plugin:通过UglifyES压缩ES6代码