Gulp 监视任务不会在 Ctrl C 上退出

Posted

技术标签:

【中文标题】Gulp 监视任务不会在 Ctrl C 上退出【英文标题】:Gulp watch task does't exit on Ctrl C 【发布时间】:2017-02-06 01:49:17 【问题描述】:

背景

我有这个 gulp watch 任务来处理 sass 编译:

import gulp from 'gulp';
import sass from 'gulp-sass';
import concat from 'gulp-concat';

gulp.task("compile-scss", () => 
  return gulp.src("assets/scss/**/*.scss")
    .pipe(sass( outputStyle: 'compressed' )
    .on("error", sass.logError))
    .pipe(concat("style.css"))
    .pipe(gulp.dest("dist/css"));
);

gulp.task("watch-scss", ['compile-scss'], () => 
  gulp.watch("assets/scss/**/*.scss", ["compile-scss"]);
);

然后我运行gulp watch-scss,该过程正确编译我的文件并开始观察新的变化。

问题

当我想停止观看时,我在终端中按 Ctrl+C,一切看起来都正常。

然后我在.scss 文件中进行了更改,并希望它不会被 gulp 任务处理(应该已经停止)。无论如何,此更改由 watch 任务处理,因为它似乎仍在运行。

查看终端代码,您可以看到我从哪里开始 gulp watch-scss,我在哪里按 Ctrl+C 以及任务在哪里继续执行更改。

环境详情

操作系统: OS X 10.11 (El Capitan)gulp 版本: 3.9.1节点版本: 6.2。 2babel-core 版本: 6.11.4

历史

问题可能与 Node 本身有关。朝着这个方向前进,我尝试了几种解决方案,例如从 gulp 中终止进程,如下所示:

process.on('SIGINT', function() 
  process.exit();
);

它没有帮助。 阅读有关该主题的大量信息,但没有任何帮助。以下是两个相关的问题,但也无济于事:

Stop a gulp watch task?

Terminate gulp-watch task

如果需要,我可以提供更多详细信息。

【问题讨论】:

暂停进程时会发生什么?你能Ctrl+Z 然后通过使用ps T 查找进程ID 来杀死停止的进程吗? 按两次Ctrl-c会退出吗? 另外,用 node 的 LTS 版本 (4.4.0) 试试这个 @MarcoS 做Ctrl-C 两次没有帮助。 @EliranMalka 我尝试做Ctrl+Z,然后成功终止了该进程。问题是这不是一个长期的解决方案。我想让Ctrl+CCtrl+Z 工作。 有趣的事情: 当我执行Ctrl+Z 时,我收到此错误throw er; // Unhandled 'error' event ^ Error: read EIO at exports._errnoException (util.js:1007:11) at TTY.onread (net.js:563:26) 【参考方案1】:

关闭终端,会话将终止。再次运行 gulp 并尝试 CTRL + C 是否有效。

【讨论】:

以上是关于Gulp 监视任务不会在 Ctrl C 上退出的主要内容,如果未能解决你的问题,请参考以下文章

Gulp 错误:监视任务必须是一个函数

Gulp循环监视任务

Gulp 使用 @import 监视和编译更少的文件

带有监视任务的 Lerna - lerna run --parallel

seek实现linux的tail -f 监视功能

gulp 的5个方法