当前位置: 首页 > 面试题库 >

gulp任务完成所有文件后运行代码

鲜于星波
2023-03-14
问题内容

因此,我一直在尝试Gulp,看看它在速度上与Grunt相比如何,我对结果印象深刻,但是我有一件事我不知道如何在Gulp中进行。

因此,我有这个任务来缩小HTML:

gulp.task('html-minify', function() {
  var files = [
    relativePaths.webPath + '/*.html',
    relativePaths.webPath + '/components/**/*.html',
    relativePaths.webPath + '/' + relativePaths.appPath + '/components/**/*.html'
  ];

  var changedFiles = buildMetaData.getChangedFiles(files);

  //TODO: needs to execute only after successful run of the task
  buildMetaData.addBuildMetaDataFiles(changedFiles);
  buildMetaData.writeFile();
  return gulp.src(changedFiles, {
      base: relativePaths.webPath
    })
    .pipe(filelog())
    .pipe(minifyHtml({
      empty: true,
      quotes: true,
      conditionals: true,
      comments: true
    }))
    .pipe(gulp.dest(relativePaths.webPath + '/' + relativePaths.appPath +  '/' + relativePaths.buildPath));
});

buildMetaData对象具有我需要的自定义功能,以及为什么不能使用像gulp-
changed这样的插件。我要弄清楚的是,在缩小完成后如何(如果可能)运行代码块来处理所有文件并成功运行。gulp有可能发生这种情况吗?


问题答案:

您可以根据以下条件完成一项任务html-minify

gulp.task('other-task', ['html-minify'], function() {
  //stuff
});

您还可以endhtml-minify任务中监听流事件:

gulp.task('html-minify', function(done) {
  var files = [
    relativePaths.webPath + '/*.html',
    relativePaths.webPath + '/components/**/*.html',
    relativePaths.webPath + '/' + relativePaths.appPath + '/components/**/*.html'
  ];

  var changedFiles = buildMetaData.getChangedFiles(files);

  //TODO: needs to execute only after successful run of the task
  buildMetaData.addBuildMetaDataFiles(changedFiles);
  buildMetaData.writeFile();
  var stream = gulp.src(changedFiles, {
      base: relativePaths.webPath
    })
    .pipe(filelog())
    .pipe(minifyHtml({
      empty: true,
      quotes: true,
      conditionals: true,
      comments: true
    }))
    .pipe(gulp.dest(relativePaths.webPath + '/' + relativePaths.appPath +  '/' + relativePaths.buildPath));

  stream.on('end', function() {
    //run some code here
    done();
  });
  stream.on('error', function(err) {
    done(err);
  });
});


 类似资料:
  • 问题内容: 我有一个其可见性由切换的元素。我还在这个元素上使用CSS动画-来自ng-animate的自动动画-对其条目进行动画处理。 元素将包含图像或视频。 在元素包含视频的情况下,我想播放它,但是在完成动画制作之前,我不想播放视频。 因此,我想知道是否有一种简单的方法可以将回调绑定到AngularJS中 CSS 动画的末尾? 该文档引用了a ,但我看不到指定它的方法… 一种解决方法(?)我想到的

  • 问题内容: 等待所有任务完成的最简单方法是什么?我的任务主要是计算,所以我只想运行大量的作业-每个内核上一个。现在,我的设置如下所示: 实现可运行。这似乎是正确执行的任务,但代码崩溃上用。这很奇怪,因为我玩了一些玩具示例,而且看起来很奏效。 包含数以万计的元素。我应该使用其他方法吗?我正在寻找尽可能简单的东西 问题答案: 最简单的方法是使用单行代码执行所需的操作。用你的话来说,你需要修改或包装以实

  • 问题内容: 我正在使用NodeJS在Firebase中执行一些异步过程。 我想在完成所有NodeJS进程执行任务时停止,而无需使用Ctrl + C命令。 我试图退出该过程,但是它会在所有执行完成之前运行。 如何执行所有异步任务,然后退出脚本? 问题答案: 首先,您的所有异步过程都应为promise,然后将所有这些promise封装在一个promise中,并在该promise解析时退出。像这样:

  • 我试着为家庭锻炼建立一个倒计时器,它在相同的间隔下运行两次,然后给你一个额外的间隔Rest。之后,它应该重新开始与3个间隔。 目前,我正在成功地运行从30秒到零的第一个间隔。我的问题是,我不能确定JavaFX任务是否完成。更准确地说,如果不创建几个自覆盖进程(例如,使用for循环),我就无法重新开始使用它。 这是我的用于处理我的FXML文件: 描述功能的GUI设计 接下来我可以尝试什么?已经尝试了

  • 问题内容: 我有ConcurrentLinkedDeque,它用于同步push / pop元素,还有一些异步任务,这些任务正在从堆栈中获取一个元素,如果该元素具有邻居,则会将其推入堆栈。 示例代码: 我想在while循环中有另外一条语句来回答问题-“执行程序中的任何任务都在工作?” 问题答案: 如果使用,没有一种干净的方法来检查所有Runnable是否都已完成。除非您在Runnable本身中构建了

  • 问题内容: 我正在使用以下代码将一个或多个文件上传到Firebase存储。上传完成后,将在控制台中记录downloadURL。 当所有文件都上传后,我想在forEach函数之外执行另一个函数。完成所有上传任务后,如何打印控制台日志? 问题答案: UploadTask对象的行为与promise一样,因为它们具有then()和catch()方法。因此,您可以将它们全部收集到一个数组中,并用于生成另一个