Gulp 为服务器 Livereload 修复 "gulp.run() has been deprecated"

Gulp Fix "gulp.run() has been deprecated" for Server Livereload

我是 Gulp 的新手,我发现了一个 Gulpfile.js 示例,每当我的 app.js 文件或./public 目录。这是 Gulpfile.js 代码:

var gulp = require('gulp'),
    spawn = require('child_process').spawn,
    node;

/**
 * $ gulp server
 * description: Launch the server. If there's a server already running, kill it.
 */
gulp.task('server', function() {
  if (node) node.kill()

  node = spawn('node', ['app.js'], {stdio: 'inherit'})

  node.on('close', function (code) {
    if (code === 8) {
      gulp.log('Error detected, waiting for changes...');
    }
  });
})

/**
 * $ gulp default
 * description: Start the development environment
 */
gulp.task('default', function() {
  gulp.run('server')

  gulp.watch(['./app.js', './public/'], function() {
    gulp.run('server')
  })
})

// clean up if an error goes unhandled.
process.on('exit', function() {
    if (node) node.kill()
})

在我的终端 window 我不断收到以下警告:

gulp.run() has been deprecated. Use task dependencies or gulp.watch task triggering instead.

Gulp 正在工作,它正在像我想要的那样重新加载 Web 应用程序,但我想解决这个问题以在未来证明我的开发过程,并摆脱这个烦人的警告消息.

感谢您的帮助!

一种选择是简单地将所有出现的 gulp.run() 替换为 gulp.start():

gulp.task('default', function() {
  gulp.start('server');

  gulp.watch(['./app.js', './public/'], function() {
    gulp.start('server');
  });
});

然而,使用 gulp.start() 显式调用任务并不是 gulp 中惯用的做事方式(尽管有时这是必要的)。

您收到的警告消息已经暗示了解决此问题的惯用方法:

Use task dependencies or gulp.watch task triggering

  • Task dependencies 允许您在另一个任务之前 运行 一个任务。这意味着您可以摆脱第一个 gulp.run().
  • gulp.watch() 中的
  • Task triggering 允许您在文件更改时 运行 执行任务。这意味着您可以摆脱第二个 gulp.run().

因此您的 default 任务最终看起来像这样:

gulp.task('default', ['server'], function() {
  gulp.watch(['./app.js', './public/'], ['server']);
});