博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gulp基础和常用插件介绍
阅读量:7045 次
发布时间:2019-06-28

本文共 4495 字,大约阅读时间需要 14 分钟。

前提:前端工程化是如今前端团队规范化管理项目和代码的概念,而前端工程化中往往是离不开前端自动化或打包工具这两种工具。本文将详细介绍其中一种常用的前端自动化工具---gulp.js

- 入门:

安装方式:

全局安装: npm install --g gulp  局部(项目安装): npm install --save-dev gulp

gulp配置文件:

在项目根目录下创建一个gulpfile.js文件,其中default任务为主任务,其他为功能任务;

语法:

var gulp = require('gulp');gulp.task('default',function(){...});

运行方式:

在命令行中直接输入gulp运行,或者在webstorm中在对应的gulpfile.js点中,然后右键,选择show gulp task方式就能运行;

- gulp的API:

一)gulp.src方法:

定义:该方法会匹配对应的文件,并以虚拟文件流(包含路径,文件名,内容)的形式返回;

语法:gulp.src(globs [,option])

特点:因为返回的文件流是类似于Readable Streams的形式,所以可以利用pipe管道的方式传输,处理文件流。

参数介绍:

a)globs:可以理解成一种类似于正则表达式的匹配模式,其值可以为匹配形式,文件路径,或者文件路径数组。

*:匹配任何字符串但不识别路径分隔符(‘/’)

eg: gulp.src('./build/*.js')   匹配build文件中所有js文件

**:匹配任何字符串包括‘/’

eg:gulp.src('**.js')  匹配任何路径下的js文件

[...] : 枚举

eg:  gulp.src('[abc].js')     匹配a.js或者b.js或者c.js

[!...] : 枚举中括号中以外的一切字符串

eg:gulp.src('[!abc].js')    匹配d.js等等js文件

? : 职匹配一个字符串

eg:gulp.src('?.js')   匹配a.js等等js文件

b)option:里面有buffer,read,base配置项,其中base项是关于文件流保存的路径相关(具体放在dest方式中阐述)

二)gulp.dest方法:

定义:将文件流写入到指定的路径文件中,并继续输出该文件流;

语法:gulp.dest(path [,option])
注意事项:
a)文件流写入的文件名只能由流入的文件流定义;
b)path是路径,不能是文件名;
c)src中base项默认是匹配符之前的字符串路径,但也可以人为设置,例子阐述:

gulp.src('a/b/*/[ab].js')    .pipe(gulp.dest('./build'))解释:默认base为a/b,塞进文件流的文件名为*/[ab].js,所以新建的文件的路径为./build/*/[ab].js
gulp.src('a/b/*/c/d.js',{base:'a'})    .pipe(gulp.dest('./build'))解释:base现是a,塞进文件流的文件名为b/*/c/d.js,所以新建的文件路径为./build/b/*/c/d.js

d)dest方法输出的文件流也可以被pipe传输;

三)gulp.task方法:

定义: 在gulp中定义一个任务,其中主任务为default;

语法: gulp.task(name [,deps] ,fn)
参数:

name是任务名;  deps是依赖的任务数组,是在当前任务之前执行的;  fn:当前任务内容;

情景:

a) gulp.task('default',function(){...}):最简单模式;
b)gulp.task('default',['A1','A2']):default是由A1,A2两个任务组成的;
c)gulp.task('default', ['A1','A2'],function(){...}):先执行完A1,A2,再执行default任务;

question: 若任务列表A1,A2中,A1存在异步操作,则执行A2时,A1还很可能未执行完;

resolve:
A) fn任务函数可以引进一个回调函数参数,该参数可以告诉外界该任务是否执行完;

eg:   gulp.task('A1',function(cb){           setTime(function(){           console.log(1);           cb();           },2000);        })        gulp.task('A2',function(){console.log(2);})        gulp.task('default',['A1','A2'],function(){             console.log(3)        })        输出结果为:2 1 3

B)任务函数返回一个流对象,适用于gulp.src方法;

gulp.task('A',function(){             return gulp.src('./a.js')                        .pipe(插件)          })gulp.task('deafult',['A'],function(){...})

C)返回一个Promise对象;

gulp.task('A',function(){            return new Promise( (res,rej) => {            })          })gulp.task('default',['A']);

四)gulp.watch方法:

定义:该方法是用来监听文件的变化;

语法一:gulp.watch(glob [,opts] , tasks)
语法二:gulp.watch(glob [,opts] , function(event){...})
event是一个事件对象;
event.type为added(添加类型);changed(改变类型);deleted(删除类型)
event.path:变化的文件路径;

- 常用gulp插件:

gulp有很多插件,而本文列举出一些常用的插件

  • gulp-uglify插件

用途:用来压缩js文件

用法:

var uglify = require('gulp-uglify');gulp.task('uglifyJS',function(cb){    gulp.src('./demo/*.js')        .pipe(uglify())        .pipe(gulp.dest('build'));    cb();});
  • gulp-minify-css插件

用途:用来压缩css文件

用法:

var minifyCss = require('gulp-minify-css');gulp.task('minifyCss',function(cb){    gulp.src('./demo/*.css')        .pipe(minifyCss())        .pipe(gulp.dest('./build'));    cb();});
  • gulp-minify-html插件

用途:合并html文件

用法:

var miniHtml = require('gulp-minify-html');gulp.task('miniHtml',function(cb){    gulp.src('./src/*.html')        .pipe(miniHtml())        .pipe(gulp.dest('./build'));});
  • gulp-connect插件

用途:自动刷新页面

用法:

var connect = require('gulp-connect');gulp.task('connect',function(){    connect.server({        root:'src',        livereload:true,    })});gulp.task('watchHtml',function(){    gulp.watch('./src/*.html',function(){        gulp.src('./src/*.html')            .pipe(connect.reload());    })});
  • gulp-jshint插件

用途:用来检查js语法

用法:

var jshint = require('gulp-jshint');gulp.task('checkJs',()=>{    gulp.src('./src/*.js')        .pipe(jshint())        .pipe(jshint.reporter())});
  • gulp-concat插件

用途:合并多个js或者css文件

用法:

var concat = require('gulp-concat');gulp.task('concat',()=>{    gulp.src('./*/*.js')        .pipe(concat('all.js'))        .pipe(gulp.dest('./build'));});
  • gulp-rename:

定义;将文件改名;

语法:
a)rename(filename):将文件直接改为指定文件名;
b)rename({dirname:'A' ,basename:'B' ,prefix:'C-',suffix:'-D', extname:'.txt'}):将文件名改为A/C-B-D.txt;
C)rename(function(path){}):path为一个对象,包含B)中所有属性;

var rename =require('gulp-rename');   gulp.task('rename',()=>{                  gulp.src('./demo/*.css')                  .pipe(rename({                            suffix:'.min',                        extname:'.less'                   }))                                   .pipe(gulp.dest('./build'));  })

参考文档:

转载地址:http://gxhal.baihongyu.com/

你可能感兴趣的文章
(轉貼) 資料庫的三家分晉:Sun併購MySQL (News)
查看>>
谷歌史上十大优秀产品榜:Android傲娇上位
查看>>
Python中的函数(二)
查看>>
matlab练习程序(LBP,局部二值模型)
查看>>
document.createElement("A");
查看>>
浅谈Java中的hashcode方法
查看>>
HDU 3392 Pie
查看>>
理解virtual方法
查看>>
MVC + ajaxform 文件上传
查看>>
墙纸定时切换!微软Wallpaper Manager使用
查看>>
[译]开闭原则
查看>>
VS2010初体验
查看>>
图示单链表
查看>>
容斥原理与多重集合
查看>>
《Windows Mobile平台应用与开发》写作工作顺利进行中
查看>>
Hadoop Map/Reduce Overview
查看>>
html5游戏开发1-Aptana 3 eclipse 插件安装
查看>>
七周七语言(5)
查看>>
《C#图解教程》读书笔记之五:委托和事件
查看>>
ASP.NET Web API 中的返回数据格式以及依赖注入
查看>>