美文网首页
gulp初识 - 导出任务+异步类型

gulp初识 - 导出任务+异步类型

作者: codingQi | 来源:发表于2019-08-20 10:49 被阅读0次

本篇是了解基础,照着官方文档按部就班的敲了几行代码而已,,当然学习了如何使用gulp的src、dest来生成dist,主要对gulp又一个基本的接触,下一篇才是重点哦。。。

  • 任务(tasks)可以是 public(公开) 或 private(私有) 类型的。
    (1)公开任务(Public tasks) 从 gulpfile 中被导出(export),可以通过 gulp 命令直接调用。
    (2)私有任务(Private tasks) 被设计为在内部使用,通常作为 series() 或 parallel() 组合的组成部分。

一、导出任务,明白gulp的运行机制

(1)创建gulpfile.js文件:

const { series, parallel } = require('gulp'); 

function cbA(cb) {
    console.log('iiii')
    cb();
}
function cbB(cb) {
    console.log('3333')
    cb();
}
exports.build = parallel(cbA, cbB);
exports.default = series(cbA, cbB);

(2)终端运行gulp:

运行结果
(3)查看task,运行gulp --tasks
查看任务

二、异步执行类型

  • 返回stream

(1)src以及dest的用法:

const { src, dest } = require('gulp');

function streamTask() {
    return src('*.json') // 匹配到以.json后缀结尾的文件
    .pipe(dest('333')) // pipe(传送)到333这个文件夹下(相当于复制)
    .pipe(dest('oooo'));
}
exports.default = streamTask;

(2)运行gulp后,结果如下:

pipe的结果
  • 返回promise

恶补了一下promise机制。。。

  • 返回event emitter
const { EventEmitter } = require('events');

function EventEmitterTask() {
    const emitter = new EventEmitter();
    console.log('888', emitter.emit);
    setTimeout(() => emitter.emit('finish'), 250);
    return emitter;
}
exports.default = EventEmitterTask;

运行及console打印如下:


  • 返回 child process
const { exec } = require('child_process');

function childProcessTask() {
    console.log('888', exec);
    return exec('date');
}
exports.default = childProcessTask;

运行及console打印如下:


  • 返回observable -------?????
const { Observable } = require('rxjs');

function observableTask() {
    console.log('888', Observable);
    return Observable.of(1, 2, 3);
}
exports.default = observableTask;

安装rxjs后,运行有问题(原因是对rxjs的Observable不了解,后面需要进行学习rxjs的相关知识):


Observable方法调用有问题
  • 使用callback

如果任务(task)不返回任何内容,则必须使用callback来指示任务已完成。如下:

function callbackTask(cb) {
  // `cb()` should be called by some async work
  cb();
}

exports.default = callbackTask;

如需通过callback把任务(task)中的错误告知gulp,请将Error作为callback的唯一参数。

function callbackError(cb) {
  // `cb()` should be called by some async work
  cb(new Error('kaboom'));
}

exports.default = callbackError;

运行结果报错,应该是正常的抛错:


抛错

检测cb打印会不会出错:

function callbackError(cb) {
    // `cb()` should be called by some async work
    cb(console.log('ppp'));
  }
  
  exports.default = callbackError;
  
正常打印,说明代码没问题

通常,是将此callback函数传递给另一个API,而不是自己调用执行它。

const fs = require('fs');

function callbackTask(cb) {
    console.log('fs', fs);
    fs.access('gulpfile.js', cb); // 判断 文件和目录是否存在
}
exports.default = callbackTask;
fs.acess
  • 使用async/await

如果不使用前面提供的几种方式,还可以将任务(task)定义为一个async函数,它将利用promise对此任务进行包装。允许使用await处理promise,并使用其他同步代码。

const fs = require('fs');

async function asyncAwaitTask() {
  const { version } = fs.readFileSync('package.json', 'utf-8');
  console.log(fs.readFileSync('package.json', 'utf-8'));
  console.log('ppp', version);
  await Promise.resolve('some result');
}

exports.default = asyncAwaitTask;

运行结果如下:可能是由于同步的问题,打印出来的version为undefined。


运行gulp

相关文章

  • gulp初识 - 导出任务+异步类型

    本篇是了解基础,照着官方文档按部就班的敲了几行代码而已,,当然学习了如何使用gulp的src、dest来生成dis...

  • Gulp 导出任务

    Gulp 导出任务 Gulp 中的任务可以是可以分为 public(公有)和 private (私有)类型。 公有...

  • Gulp基础

    基础使用 yarn add gulp --dev gulpfile.js 入口文件 gulp 的任务函数都是异步的...

  • Gulp 第一个Gulp任务

    本节我们开始学习如何创建 Gulp 任务。每一个 Gulp 任务都是一个异步的 JavaScript 函数,这个函...

  • Gulp 第一个Gulp任务

    本节我们开始学习如何创建 Gulp 任务。每一个 Gulp 任务都是一个异步的 JavaScript 函数,这个函...

  • Gulp 导出任务

    Gulp 中的任务可以是可以分为 public(公有)和 private (私有)类型。 公有任务:从 gulpf...

  • 关于同步运行gulp任务那些事

    背景 Gulp 默认将所有任务和步骤异步化运行。显而易见,Gulp 在效率上是有明显的提升的。但是如果需要同步执行...

  • gulp 任务同步异步的思考

    js构建的时候,经常出现需要处理异步同步的,比如js:release等任务需要等待clean任务完成才可以;很容易...

  • 导出excel文件

    依赖jar包 工具类 导出示例 这种方式只适合导出小文件,如果是比较大的文件不适合实时导出,可以做成异步任务,将导...

  • Gulp的几个常用功能

    npm 安装 Gulp 常用方法 gulp.task -- 定义任务 gulp.src -- 找到需要执行任务的文...

网友评论

      本文标题:gulp初识 - 导出任务+异步类型

      本文链接:https://www.haomeiwen.com/subject/cwizjctx.html