浅谈前端项目打包工具webpack和gulp
webpack:一个模块打包工具(更适合单页面spa模块开发)
Webpack更侧重于模块打包,把开发中的所有资源(图片、js文件、css文件等)看成模块。Webpack是通过loader(加载器)和plugins(插件)对资源进行处理的
gulp:基于流格式的打包构建工具(更适合多页面模块mpa开发)
gulp:前端自动化打包构建工具,基于流格式的打包构建工具
打包:把文件压缩,整合,移动,混淆
流格式:从头到尾的过程,从源开始一步一步加工,每一个步骤需要依赖上一步的结果,最终得到最后结果
环境有求:依赖于node环境进行开发,底层封装的内容就是node的读写文件
gulp侧重于前端开发的整个过程的控制管理(像是流水线),我们可以通过给gulp配置不通的task(通过gulp中的gulp.task()方法配置,比如启动server、sass/less预编译、文件的合并压缩等等)来让gulp实现不同的功能,从而构建整个前端开发流程
gulp的常见api:gulp.src()、gulp.dest()、gulp.task()、gulp.watch()、gulp.series()、gulp.parallel()
gulp.src()方法: 创建一个流,用于从文件系统读取 Vinyl 对象。
语法:gulp.src(globs, [options])
- globs参数是文件匹配模式(类似正则表达式),用来匹配文件路径(包括文件名),当然这里也可以直接指定某个具体的文件路径。当有多个匹配模式时,该参数可以为一个数组。
- options为一个可选的参数对象,通常我们不需要用到
注:BOMs(字节顺序标记)在 UTF-8 中没有任何作用,除非使用 removeBOM 选项禁用,否则 src() 将从读取的 UTF-8 文件中删除BOMs。
gulp.dest()方法:创建一个用于将 Vinyl 对象写入到文件系统的流。
语法:gulp.dest(path[,options])
- path为写入文件的路径
- options为一个可选的参数对象,通常我们不需要用到
要想使用好gulp.dest()这个方法,就要理解给它传入的路径参数与最终生成的文件的关系。
gulp的 使用流程一般是这样子的:
- 首先通过gulp.src()方法获取到我们想要处理的文件流
- 然后把文件流通过pipe方法导入到gulp的插件中
- 最后把经过插件处理后的流再通过 pipe 方法导入到gulp.dest()中
- gulp.dest()方法则把流中的内容写入到文件中
注:我们给gulp.dest()传入的路径参数,只能用来指定要生成的文件的目录,而不能指定生成文件的文件名,它生成文件的文件名使用的是导入到它的文件流自身的文件名,所以生成的文件名是由导入到它的文件流决定的,即使我们给它传入一个带有文件名的路径参数,然后它也会把这个文件名当做是目录名
gulp.task方法:用来定义任务
语法:gulp.task(name[, deps], fn)
name为任务名
deps 是当前定义的任务需要依赖的其他任务,为一个数组。当前定义的任务会在所有依赖的任务执行完毕后才开始执行。如果没有依赖,则可省略这个参数
fn 为任务函数,我们把任务要执行的代码都写在里面。该参数也是可选的。
当依赖是异步任务时的处理:想等待异步任务中的异步操作完成后再执行后续的任务,有三种方法在异步操作完成后执行一个回调函数来通知 gulp 这个异步任务已经完成,这个回调函数就是任务函数的第一个参数
定义任务时返回一个流对象。适用于任务就是操作 gulp.src 获取到的流的情况
返回一个 promise 对象
gulp.watch方法:用来监视文件的变化,当文件发生变化后,我们可以利用它来执行相应的任务,例如文件压缩等。
语法1:gulp.watch(glob[, opts], tasks)
- glob 为要监视的文件匹配模式,规则和用法与gulp.src()方法中的glob相同
- opts 为一个可选的配置对象,通常不需要用到
- tasks 为文件变化后要执行的任务,为一个数组
语法2:gulp.watch(glob[, opts, cb])
- glob 为要监视的文件匹配模式,规则和用法与gulp.src()方法中的glob相同
- opts 为一个可选的配置对象,通常不需要用到
- cb参数为一个函数。每当监视的文件发生变化时,就会调用这个函数,并且会给它传入一个对象,该对象包含了文件变化的一些信息,type属性为变化的类型,可以是added,changed,deleted;path属性为发生变化的文件的路径
gulp.series方法:将任务函数和/或组合操作组合成更大的操作,这些操作将按顺序依次执行。
对于使用 series() 和 parallel() 组合操作的嵌套深度没有强制限制
语法1:gulp.series(…tasks)
- tasks任意数量的任务函数都可以作为单独的参数传递。如果您以前注册过任务,可以使用字符串,但不建议这样做。
gulp.parallel方法:将任务功能和/或组合操作组合成同时执行的较大操作。
对于使用 series() 和 parallel() 进行嵌套组合的深度没有强制限制。
语法1:gulp.parallel(…tasks)
- tasks任意数量的任务函数都可以作为单独的参数传递。如果您以前注册过任务,可以使用字符串,但不建议这样做。
更多gulp api详情请参考链接:gulp的API介绍
webpack和glup对比图
参考文章链接:下图来源
浅谈前端项目打包工具webpack和gulp相关推荐
- 前端自动化打包工具--webpack
前端自动化打包工具–webpack 背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的 ...
- 前端开发打包工具——webpack(1)
什么是webpack? webpack 是一个打包模块化 javascript 的工具,在webpack 里一切文件皆模块,通过 loader 转换文件,通过 plugin 注入钩子,最后输出由多个模 ...
- 实战录 | 浅谈前端项目构建与优化
<实战录>导语 云端卫士的新栏目<实战录>将会定期分享一些我们的工程师伙伴们在产品研发的过程中总结的实践经验,希望对于热爱技术且关注安全领域的受众有所裨益.本期分享人为云端卫士 ...
- 2022浅谈前端八大UI库
之前在3月份的时候做过一个<浅谈前端八大UI库>的公开课,反馈还不错,当时就想着等有时间了,就把公开课讲的东西,组织成一个博客.这一等,就等了两个多月. 先说一下什么样的同学适合看这个博客 ...
- 浅谈前端自动化构建 -- Grunt、Gulp、FIS
前言 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:内容较多,建议通过左侧导航栏进行阅读 前端自动化构建 基本介绍 一切重复工作本应自动化.将开发中的源代码,自动化的转换成生产环境中可以运行的程序, ...
- 前端模块打包工具都有哪些---kalrry---ing
前端模块打包工具都有哪些---kalrry---ing 前言 一.Webpack 二.Parcel 三.Rollup 四.三者对比 END---待学 前言 Win配置记录 Mac配置记录 一.Webp ...
- java 定时任务怎么关闭_浅谈springboot项目中定时任务如何优雅退出
在一个springboot项目中需要跑定时任务处理批数据时,突然有个Kill命令或者一个Ctrl+C的命令,此时我们需要当批数据处理完毕后才允许定时任务关闭,也就是当定时任务结束时才允许Kill命令生 ...
- 浅谈前端路由原理hash和history
浅谈前端路由原理hash和history
- 浅谈MAXIMO项目实施(转)
浅谈MAXIMO项目实施 工作以来,参与了XX公司的MAXIMO项目实施,妄谈一些工作中的感受和对MAXIMO的理解,欢迎砖头. [b]对MAXIMO的理解[/b] MAXIMO是老外的软件,是J2E ...
最新文章
- ios 自动打包命令_iOS自动打包上传脚本
- 将图片转换成16进制的代码
- 400+节点的 Elasticsearch 集群运维
- CodeForces 468 CHack it!
- vue2项目中给echarts地图设置背景图和打点
- 51单片机 驱动有源/无源蜂鸣器+Proteus仿真
- 网友自制的谷歌输入法皮肤及制作方法
- Excel高级图表制作②——帕累托图
- 网易-资深iOS开发工程师
- java游戏管理器虚拟按键_Android实现手机游戏隐藏虚拟按键
- Android 12 init(3) 属性服务
- 计算机相关先锋队名称,励志团队名称和口号大全_团队励志队名口号大全
- Oracle中游标Cursor介绍
- 哪个充电宝无线充电最快?功率最大的无线充电宝推荐
- python中subplot是什么意思_subplot(2,3,1)啥意思?
- 微信小程序开发.小程序入门(上)
- C语言判断一个数是偶数还是奇数
- Angular官网学习4:Angular入门,你的第一个应用(4)输出
- 课程linux实验报告,Linux操作系统课程实验报告.doc
- 实现综合案例的注册、登录和跳转到主页面的功能