某个深夜独自在房间深造,在不断键盘敲击的“Alt+Tab”和“F5”许久,我开始疲惫了,于是从冰箱抡起一杯可乐。畅饮之余,去Google寻求仙人指路,仙人找到了nodejs为我指点了迷津,并递给我一杯可乐和吸管,原来“她”就在这里,她的名字叫“Gulp”。
她虽然只是一杯插着吸管的饮料,可却能在烈日炎炎的夏天舒缓你焦灼的身心,在寒冷的冬天给你雪中送炭似的温暖,给你不一样的编码体验。
拾起一杯Gulp
gulpjs是一个前端构建工具,API简单,基于任务流,无需像Grunt复杂的配置。
安装
在安装了node.js的基础上使用命令行或git即可安装。
全局安装:
作为项目的开发依赖安装(-dev),如果作为项目依赖,则只需(–save)
根目录创建gulpfile.js
|
|
运行
如果省略了task参数,则gulp === gulp default
畅饮Gulp
在了解的Gulp的一些插件和基本使用方法之后,我开始构建自己的gulpfile.js,这个流程可以实现如下功能。
- 实时监听文件的变化,一旦保存浏览器自动刷新。
- 自动编译scss文件
- 合并样式文件、脚本文件
- 压缩样式文件、脚本文件、图片
|
|
插件介绍
browserSync:浏览器实时相应文件更改并进行重新加载
gulp-load-plugins:gulp插件加载工具,可对gulp插件进行重命名。当使用插件过多时可以有效管理和组织插件。
gulp-ruby-sass: sass编译工具,同时生成sourcemap方便调试
gulp-clean-css: 压缩css工具
gulp-uglify: 压缩js工具
gulp-concat:css、js合并工具
gulp-imagemin: 图片压缩工具
流程说明
- 在项目开发阶段,只存在src目录,所有开发均在src目录进行,直到项目开发完成,运行gulp命令则生成dist发布目录。
- 项目开发过程中执行gulp server命令,即可实施监听文件变动从而实现浏览器自动刷新。
gulp server运行时,一旦文件重新保存,则触发以下任务:
- scss-vendor文件夹中的样式文件会被编译并打包成bundle.css并输出到css-vendor
- js-vendor中的库文件会被打包成bundle.js并输出到js-vendor
- scss目录下同级的scss文件将被合并到main.scss文件中并被编译成main.css打包到css目录下面。
|
|
品味Gulp
Gulp-API
以下为API介绍,[]中的参数为可选,options参数不太常用,故不作详细介绍。
gulp.task(name[, deps], fn)
定义一个使用 Orchestrator 实现的任务(task)。
name: 任务的名字,如果你需要在命令行中运行你的某些任务,那么,请不要在名字中使用空格。
deps: 一个包含任务列表的数组,这些任务会在你当前任务运行之前完成。
gulp.src(globs[, options])
输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件。 将返回一个 Vinyl files 的 stream 它可以被 piped 到别的插件中。
gulp.dest(path[, options])
能被 pipe 进来,并且将会写文件。并且重新输出(emits)所有数据,因此你可以将它 pipe 到多个文件夹。如果某文件夹不存在,将会自动创建它。
gulp.watch(glob[, opts, cb])
|
|
怎么少了gulp.pipe()?
生活中我们每天都在搞事情,事情等同于任务,但这个任务中不同的环节是有依赖关系的,比如完成一幅画涂颜料需要在绘画完成后才能开始,于是gulp.pipe()相当于提供一个管道,让我们将这些环节连接起来,最终完成一个完整的任务。
关于glob参数匹配规则
发起一项任务需要寻找文件对象,这就需要一些规则用于匹配文件。
匹配规则
|
|
示例:
由上面可以看出gulp匹配的规则和正则大致相同。有一点要注意的是**匹配符号会深入所有的子目录里面,而出现路径分割符只会进入一级子目录中寻找匹配文件。
匹配模式
匹配模式分为:单一匹配、多种匹配、展开匹配
单一匹配
精确匹配:
模糊匹配:
多种匹配
当有多种匹配模式(多个单一匹配)时可以使用数组
使用数组的方式还有一个好处就是可以很方便的使用排除模式,在数组中的单个匹配模式前加上!即是排除模式,它会在匹配的结果中排除这个匹配,要注意一点的是不能在数组中的第一个元素中使用排除模式
展开匹配
|
|