【问题标题】:Set a Gulp task to be the default将 Gulp 任务设置为默认任务
【发布时间】:2015-02-11 13:54:24
【问题描述】:

我的gulpFile 中有以下任务,由我团队中的其他人创建:

gulp.task('serve', [], function(){
   gulp.run(
    'fonts',
    'browsersync',
    'watch'
  );
});

我想不管它,但我也想将默认任务映射到这个任务。所以我尝试了:

gulp.task('default',['serve']);

它似乎工作,因为服务器运行,但由于某种原因“监视”任务没有发生,我没有让浏览器刷新更改。

如果我运行“gulp serve”而不是“gulp”,一切都会按计划进行。我做错了什么?

编辑: 这是监视任务:

gulp.task('watch', ['styles', 'browsersync'], function() { //'default'
  gulp.watch(
    [
      './app/assets/sass/**/*.scss',
      './app/modules/**/*.scss'
    ], ['styles']);

  gulp.watch([
    './app/**/*.js',
    './app/**/*.html'
  ], function() {
    reload();
  });

});

【问题讨论】:

  • 你的监视任务是什么样的?
  • 添加到原始问题。对不起。

标签: node.js gulp gulp-watch


【解决方案1】:

尝试更新您的默认任务以在数组参数中包含监视任务,而不是在 serve 中运行它。像这样:

gulp.task('default', ['serve', 'watch']);

如果您查看asynchronous task support 上的 Gulp 文档,尤其是最后一个示例,您会发现您可以要求在指定任务开始之前完成相关任务。

var gulp = require('gulp');

// takes in a callback so the engine knows when it'll be done
gulp.task('one', function(cb) {
    // do stuff -- async or otherwise
    cb(err); // if err is not null and not undefined, the run will stop, and note that it failed
});

// identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
    // task 'one' is done now
});

gulp.task('default', ['one', 'two']);

【讨论】:

  • 您能否提供有关如何在 Gulp 4 中执行此操作的信息,其中不使用任务名称数组作为第二个参数?
【解决方案2】:

gulp.rungulp.start 被认为是不好的做法:

https://github.com/gulpjs/gulp/issues/426
https://github.com/gulpjs/gulp/issues/505

不幸的是,这里的答案似乎是您的同事可能并不真正了解 Gulp。如果不更改他们的代码,您可能无法解决此问题。

如果没有更多上下文,比如整个 gulpfile,我无法重现您的确切问题。然而,我的预感是它与 Gulp 异步/连续运行任务的方式有关。可能是您的“默认”任务过早退出,因为gulp.run 不会同步执行。无论哪种方式,Gulp 都对哪些任务需要等待什么、何时等待感到困惑。您正在使用两种完全不同的工具来管理您的运行序列。

您的“服务”任务应该真正使用依赖项来运行其他任务,而不是 gulp.run

gulp.task('serve', ['fonts', 'browsersync', 'watch']);
gulp.task('default', ['serve']);

另外,值得指出的是,您的监视任务已经将“浏览器同步”列为依赖项。虽然技术上不正确(Gulp 将第二次忽略它),但它可能导致过度复杂和混乱,因此可能不是一个好主意。如果 'watch' 依赖于 'browsersync',你可以从 'serve' 中移除 'browsersync' 依赖:

gulp.task('watch', ['styles', 'browsersync'], function () {
  gulp.watch([
    './app/assets/sass/**/*.scss',
    './app/modules/**/*.scss'
  ], ['styles']);

  gulp.watch([
    './app/**/*.js',
    './app/**/*.html'
  ], function() {
    reload();
  });
});
gulp.task('serve', ['fonts', 'watch']);
gulp.task('default', ['serve']);

这应该会为您提供所需的结果。


话虽如此,如果您真的坚持遵循不良做法,您可以尝试在您的“默认”任务中使用gulp.run

gulp.task('default', function() {
  gulp.run('serve');
});

我怀疑您的主要问题是您混合使用数组任务依赖项和gulp.run,但无论哪种方式,gulp.run 都是“做错了”。

【讨论】:

【解决方案3】:

在 Gulp 版本 4 中测试,您可以这样运行:
请注意,您可以使用异步返回函数。

文件名:gulpfile.js

gulp.task('one', async () => {
  // action you desire
});

// If you want to in parallel
gulp.task('default', gulp.parallel('one'));
// If you want to in series
gulp.task('default', gulp.series('one'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2021-10-25
    • 1970-01-01
    • 2016-08-23
    • 2021-07-23
    • 2015-05-27
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多