Gulp学习(2)使用插件、文件监控

使用插件
Gulp插件实质上是Node转换流(Transform Streams)

它封装了通过管道(pipeline)转换文件的常见功能
  通常是使用.pipe()方法并放在src()和dest() 之间

每个插件应当只完成必要的工作,获得想要的结果可能需要把一组插件组合在一起使用
  
  例如:
    var gulp = require('gulp');
    var cssnano = require('gulp-cssnano');

    gulp.task('css',async function(){
      await gulp.src(["./src/css/*.css","./src/scss/*.css"])
      .pipe(cssnano())
      .pipe(gulp.dest('./dist/css/'));
    })

注意;
  并非 gulp 中的一切都需要用插件来完成
  虽然它们是一种快速上手的方法,但许多操作都应当通过使用独立的功能模块或库来实现

插件应当总是用来转换文件的
其他操作都应该使用(非插件的) Node 模块或库来实现。

1、条件插件
因为插件的操作不应该针对特定文件类型,因此你可能需要使用像gulp-if 之类的插件来完成转换某些文件的操作
例如:
var gulp = require(‘gulp’);
var gif = require(‘gulp-if’);
var cssnano = require(‘gulp-cssnano’);

  function is_css(file){
    return file.extname === '.css'
  }

  gulp.task('css',async function(){
    await gulp.src(["./src/css/*.css","./src/scss/*.css","./src/js/*.js"])
    .pipe(gif(is_css,cssnano()))
    .pipe(gulp.dest('./dist/css/'));
  })

2、内联插件(Inline plugins)
内联插件是一次性的转换流(Transform Streams)

在两种情况下,创建内联插件很有用:
(1)避免自己创建并维护插件。
(2)避免 fork 一个已经存在的插件并添加自己所需的功能。

文件监控
gulp的api中的watch()方法利用文件系统的监控程序(file system watcher)将globs与任务(task)进行关联
它对匹配glob的文件进行监控
如果有文件被修改了就执行关联的任务(task)
如果被执行的任务(task)没有触发异步完成信号,它将永远不会再次运行了

此API的默认设置是基于通常的使用场景的,而且提供了内置的延迟和排队机制

可监控的事件:
默认情况下,要创建、更改或删除文件,文件监控程序就会执行关联的任务(task)
如果你需要使用不同的事件,你可以在调用watch()方法时通过events参数进行指定
可用的事件有’add’、‘addDir’、‘change’、‘unlink’、‘unlinkDir’、‘ready’、‘error’
此外,还有一个’all’事件,它表示除’ready’和’error’之外的所有事件

初次执行
调用watch()之后,关联的任务(task)是不会被立即执行的,而是要等到第一次文件修之后才执行

如需在第一次文件修改之前执行,也就是调用watch()之后立即执行,将ignoreInitial参数设置为false

例如:
  var gulp = require('gulp');
  var gif = require('gulp-if');
  var cssnano = require('gulp-cssnano');

  function is_css(file){
    return file.extname === '.css'
  }

  gulp.task('css',async function(){
    await gulp.src(["./src/css/*.css","./src/scss/*.css","./src/js/*.js"])
    .pipe(gif(is_css,cssnano()))
    .pipe(gulp.dest('./dist/css/'));
  })

  gulp.task('watch', function(){
    gulp.watch("./src/css/*.css", { ignoreInitial: false } ,gulp.series("css"));
  });

  gulp.task('default', gulp.parallel("watch"));

队列:
watch()方法能够保证当前执行的任务(task)不会再次并发执行
当文件监控程序关联的任务(task)正在运行时又有文件被修改了
那么所关联任务的这次新的执行将被放到执行队列中等待
直到上一次关联任务执行完之后才能运行
每一次文件修改只产生一次关联任务的执行并放入队列中

如需禁止队列,请将 queue 参数设置为 false
例如:
  var gulp = require('gulp');
  var gif = require('gulp-if');
  var cssnano = require('gulp-cssnano');

  function is_css(file){
    return file.extname === '.css'
  }

  gulp.task('css',async function(){
    await gulp.src(["./src/css/*.css","./src/scss/*.css","./src/js/*.js"])
    .pipe(gif(is_css,cssnano()))
    .pipe(gulp.dest('./dist/css/'));
  })

  gulp.task('watch', function(){
    gulp.watch("./src/css/*.css", { ignoreInitial: false, queue: false } ,gulp.series("css"));
  });

  gulp.task('default', gulp.parallel("watch"));

延迟
文件更改之后,只有经过200毫秒的延迟之后,文件监控程序所关联的任务(task)才会被执行
这是为了避免在同使更改许多文件时(例如查找和替换操作)过早启动任务(task)的执行

如需调整延迟时间,请为 delay 参数设置一个正整数
 例如:
  var gulp = require('gulp');
  var gif = require('gulp-if');
  var cssnano = require('gulp-cssnano');

  function is_css(file){
    return file.extname === '.css'
  }

  gulp.task('css',async function(){
    await gulp.src(["./src/css/*.css","./src/scss/*.css","./src/js/*.js"])
    .pipe(gif(is_css,cssnano()))
    .pipe(gulp.dest('./dist/css/'));
  })

  gulp.task('watch', function(){
    gulp.watch("./src/css/*.css", { ignoreInitial: false, queue: false,delay: 250 } ,gulp.series("css"));
  });

  gulp.task('default', gulp.parallel("watch"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值