#每天五分钟之IT技能包# 前端自动化构建利器 gulp 方法篇

Posted 大敏的技术栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#每天五分钟之IT技能包# 前端自动化构建利器 gulp 方法篇相关的知识,希望对你有一定的参考价值。

gulp 借鉴了 Unix 操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入

一、输入流

获取当前文件流存储于管道

gulp.src(globs[, options])

globs:需要处理的源文件匹配符路径。

  • 使用具体路径

获取 js 目录下 app.js 文件

gulp.src("js/app.js")
  • 使用通配符

通配符路径匹配规则:


描述
* 匹配所有文件
例:js/*.js,匹配 js 目录下所有 js 文件
** 匹配0个或者多个子文件夹
例:view/**/*.html,匹配 view 目录下及其子目录下所有的 html 文件
{} 匹配多个属性
例1:js/{a,b}.js,匹配 js 目录下 a.js 及 b.js 两文件
例2:images/*.{jpg,png,gif},匹配 images 目录下所有jpg/png/gif文件
! 排除文件
例:!less/test.less,排除 less 目录下的 test.less 文件


  • 组合使用

获取 less 目录下的所有 .less 文件,但是排除 test.less 文件

gulp.src(['less/**/*.less', '!less/test.less']);

options:有三个属性可以设置 buffer、read、base

名称 类型 默认值 描述
options.buffer Boolean true 如果设置为false,那么将会以stream方式返回,而不是文件的buffer形式。这在处理一些大文件时将会很有用。
options.read Boolean true 如果设置为false,那么会返回空值,也就是不会去读取文件。
options.base String
设置输出路径的基础目录,具体用法参考后面的示例

二、输出流

输出文件流至指定路径(流可以从管道中获取),如果文件夹不存在,将会自动创建。

gulp.dest(path[, options])

path:文件输出目录,也可以传递一个函数,在函数中返回一个路径。

options:有两个属性可以设置 cwd、mode

名称 类型 默认值 说明
options.cwd String process.cwd() 输出目录的cwd参数,只在所给的输出目录是相对路径时有效
options.mode String 0777 定义所有在输出目录中所创建的目录的权限



例:将 src/js 目录下所有的 js 文件全部复制至 build/js 目录

gulp.src("./src/js/*.js")
    .pipe(gulp.dest("./build/js"))

假设,src/asset/js/ 目录下存放项目的 js 文件,现在进行项目打包,需要将所有的 js 文件移动至 build/asset/js 目录下,那么应该怎么实现

以 src/asset/js/common/app.js 文件为例

第一步:获取指定目录下所有文件

gulp.src("src/asset/js/**/*.js")

第二步:输出至指定目录

输出目录该写什么?build?build/asset?build/asset/js?

gulp.dest("build")           // 写入 'build/common/app.js'
gulp.dest("build/asset")     // 写入 'build/asset/common/app.js'
gulp.dest("build/asset/js")  // 写入 'build/asset/js/common/app.js'

可以看出,最终的输出路径,是 dest 方法定义的输出路径 + src 方法匹配路径。其实这都是 src 方法中的 option.base 属性的作用。

gulp.src('src/asset/js/**/*.js')       // 获取文件流,并且设置 base 为 src/ex2,匹配路径为 common/app.js
       .pipe(gulp.dest("build"));      // 写入 'build/js/app.js'

gulp.src('src/asset/js/**/*.js', {base: 'src'})  // 获取文件流,并且设置 base 为 src,匹配路径为 asset/js/common/app.js
       .pipe(gulp.dest("build"));                // 写入 'build/ex2/js/app.js'

三、监听器

监视文件,并且可以在文件发生改动时做一些事情

gulp.watch(glob[, opts], tasks);

或者

gulp.watch(glob[, opts, cb]);

例1:监视 src/js 目录下所有的 js 文件,如果发生改动,则调用 js 任务,自动将文件复制至 build 目录下

gulp.watch('src/js/**/*.js', ['js']);

最后提供一下综合示例

源码目录:src,其中,src/asset/js 目录存放 js 文件,
输出目录:build
将源码目录中的所有 js 文件打包至输出目录,并且当有 js 文件发生变更时,执行自动打包动作

var gulp = require('gulp');

gulp.task('js', function() {
    gulp.src('src/asset/js/**/*.js', {base: "src"})
         .pipe(gulp.dest("build"));
})

gulp.task('default', ['js'], function() {
    gulp.watch('src/asset/js/**/*.js', ['js']);
})


以上是关于#每天五分钟之IT技能包# 前端自动化构建利器 gulp 方法篇的主要内容,如果未能解决你的问题,请参考以下文章

入门C/C++自动构建利器之Makefile

003::每天五分钟入门TCP/IP协议栈::IP协议之TOS字段说明

五分钟学会用Jmeter+ant+jenkins实现接口自动化构建!

前端构建工具gulp之基本介绍

一篇文章入门C/C++自动构建利器之Makefile

jenkins学习14-构建触发器之定时构建和轮询 SCM