博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
就算萌新也能看得懂的gulp教程(1):①读②改③写
阅读量:7005 次
发布时间:2019-06-27

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

1、安装gulp

核心点是gulp文件的文件名一定是:gulpfile.js

task就是一个任务(要做的一系列事)

运行通过gulp来执行默认的task或者通过gulp task名来执行指定的task(因为一个gulp文件里可能有多个互相独立的task

2、读取文件

gulp.src(files[, options])

效果:

读取文件,产生数据流。

files的写法(字符串或数组)(必填):

  1. js/app.js:指定确切的文件名;
  2. js/*.js:某个目录所有后缀名为js的文件;
  3. js/**/*.js:某个目录及其所有子目录中的所有后缀名为js的文件;
  4. !js/app.js:除了js/app.js以外的所有文件。
  5. *.+(js css):匹配项目根目录下,所有后缀名为js或css的文件。

files的写法(对象)(选填):

1、options.buffer

默认是true,以buffer的形式读取(即一次读取整个文件),而改为false的时候则为stream(流)的方式读取。

流模式适合读取大文件,但是一般的html、css、js之类的,可以用buffer读取(但推荐用流)。

假如你需要读取完整个文件,然后对整个文件正则匹配,那么只能用buffer的形式。

2、options.read

默认true,设为false则file.contents返回值为null(不会读取文件)

还有 options.base 以及 node-globglob-stream 所支持的参数,但是这里略过。

示例:

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

就是这么简单,读取了一个文件

3、拿来一个流,做点事,再把他返回

stream.pipe(fn)

简单来说,通过gulp.src(),我们已经读取了一个文件流,然而我们需要对这个文件流做点事,那么就是pipe的作用了。

1、获取文件流:pipe函数用于处理文件流(来源于上下文),即调用pipe方法的这个对象;

2、处理文件流:pipe接受一个参数,这个参数用于处理这个文件流;

3、返回文件流:这个处理文件流的参数,最后要返回处理后的这个流;

4、连写pipe:因为拿来和最后返回的是同一个东西,因此是可以连写的(就像jQuery选择器选择到DOM后的连写那样);

先给一个简单的示例吧:

var gulp = require('gulp');var through = require('through2');gulp.task('default', function () {    gulp.src('a.js')        .pipe(through.obj(function (file, encode, cb) {            console.log('第一次处理')            this.push(file)            cb()        }))        .pipe(through.obj(function (file, encode, cb) {            console.log('第二次处理')            this.push(file)            cb()        }))});// 输出第一次处理第二次处理

4、对这个文件流做点啥

上面只是简述了pipe干嘛用的,那么现在我们实际用文件流的形式做点什么。

through2模块,用于处理文件流

这个模块干嘛用的,有兴趣的可以看看

用这个模块,基本套路很简单:

1、引入 through2 模块;

2、调用他的obj方法,并传一个函数作为参数(这个函数是我们的处理函数);.pipe(through.obj(callback))

3、写这个callback处理函数;

4、这个callback有三个参数,分别是:fileencode(文件编码,比如'utf8'),cb(继续执行,类似 express 里路由的 next);

5、我们先对 file 干点啥,然后通过 this.push(file)(这里的file是修改后file)才能继续下面的 pipe,最后执行 cb() 继续下一个 pipe

基本示例(不对file做点什么):

var gulp = require('gulp');var through = require('through2');gulp.task('default', function () {    gulp.src('a.js')        .pipe(through.obj(function (file, encode, cb) {            console.log(arguments)            this.push(file)            cb()        }))});// 输出结果{ '0': 
>, '1': 'utf8', '2': [Function] }

再给一个在原文件内容后拼接了一个字符串的DEMO:

var gulp = require('gulp');var through = require('through2');gulp.task('default', function () {    gulp.src('a.js')        .pipe(through.obj(function (file, encode, cb) {            // 显示当前的文本内容            console.log(file.contents.toString())            // 文本内容转为字符串            var result = file.contents.toString()            // 添加了一点东西            result += ' => I add some words here'            // 再次转为Buffer对象,并赋值给文件内容            file.contents = new Buffer(result)            // 以下是例行公事            this.push(file)            cb()        }))        .pipe(through.obj(function (file, encode, cb) {            // 显示当前的文本内容(这次显示的是修改后的)            console.log(file.contents.toString())            this.push(file)            cb()        }))        // 把文件写到一个新的文件夹里(不影响原有的),目录是modified-files        .pipe(gulp.dest('modified-files'));});// 输出abcdefabcdef => I add some words here并且modified-files/a.js文件里的内容是修改后的内容

讲道理说,懂以上方法,已经可以解决很多问题了。

无非就是读取文件,转为字符串,改改改,变为Buffer对象赋值回去,写到一个新的文件夹里(原文件名不变)

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

你可能感兴趣的文章
Android 文件访问权限的四种模式
查看>>
安卓Android科大讯飞语音识别代码使用详解
查看>>
English - little,a little,a few,few的区别
查看>>
Jquery属性获取——attr()与prop()
查看>>
Mysql shell 控制台---mysqlsh
查看>>
JQuery的ready函数与JS的onload的区别详解
查看>>
eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced
查看>>
yii2权限控制rbac之rule详细讲解
查看>>
Android AbsListView Abs前缀
查看>>
Redis应用场景一
查看>>
webservice 协议
查看>>
SAR-303 xml validator验证框架
查看>>
牛腩学用MUI做手机APP
查看>>
WCF--安全小见解...
查看>>
C# Type.GetConstructor() 根据构造函数参数获取实例对象(一)
查看>>
针对各地项目icomet停止服务的临时处理办法
查看>>
Spring源代码解析
查看>>
搞明白这八个问题,Linux系统就好学多了
查看>>
Android Weekly Notes Issue #222
查看>>
CAD字体显示问号的解决办法
查看>>