Gruntjs 当Grunt退出时终止生成的进程

Gruntjs 当Grunt退出时终止生成的进程,gruntjs,Gruntjs,我目前正在尝试执行几个步骤,这些步骤要求将任务衍生到子进程中。例如: 监视文件 启动我的静态站点生成器的预览服务器 我可以很容易地使用一个任务,比如同时运行这两个任务。但是,当我退出grunt时,子进程(在本例中,是我正在使用的静态站点生成器)会继续运行。我想让这些任务同时运行——但也希望在grunt退出时终止它们 想法?您是否有理由不使用grunt contrib connect在项目根目录中启动服务器 如果可能的话,不要使用grunt shell,当grunt进程退出时,服务器将自动关闭不确

我目前正在尝试执行几个步骤,这些步骤要求将任务衍生到子进程中。例如:

  • 监视文件
  • 启动我的静态站点生成器的预览服务器
  • 我可以很容易地使用一个任务,比如同时运行这两个任务。但是,当我退出grunt时,子进程(在本例中,是我正在使用的静态站点生成器)会继续运行。我想让这些任务同时运行——但也希望在grunt退出时终止它们


    想法?

    您是否有理由不使用grunt contrib connect在项目根目录中启动服务器


    如果可能的话,不要使用grunt shell,当grunt进程退出时,服务器将自动关闭

    不确定grunt shell如何工作。但如果您要设置一个自定义grunt任务来运行您的服务器,您可以尝试以下操作:

      var spawn = require('child_process').spawn;
      var server = spawn('myserver', ['--foo']);
      process.on('exit', function() {
         grunt.log.writeln('killing myserver...');
         server.kill();
         grunt.log.writeln('killed myserver');
      });
    

    可能这就是创建的原因。

    显然,
    grunt shell
    不处理
    进程
    退出事件:

    因此,我怀疑您的grunt进程正在退出,
    grunt shell
    从不警告它的子进程父进程正在停止

    例如,
    grunt concurrent
    确实杀死了它的子进程,我们可以在这里看到:

    process.on('exit', function () {
        cpCache.forEach(function (el) {
            el.kill();
        });
    });
    
    资料来源:

    因此,使用
    gruntshell
    对您不起作用

    一种解决方案是在Grunfile中要求
    wintersmith
    ,并在自定义任务中以编程方式运行它。

    请参阅上的“我的答案”


    当您有一个显式需要调用的脚本时(例如:当该进程被后台监控时),这非常有用。

    要点很好-但不幸的是没有。我正在使用Wintersmith作为我的站点生成器(它确实使用连接服务器)-但我希望避免为预览服务器复制该逻辑。我尝试过,但没有成功(没有写消息或服务器被杀死),不幸的是。这是我最喜欢的答案。简单,直截了当。没有学习曲线。如果事情这么简单,我真的支持不使用库。从技术上讲,grunt shell插件应该在内部完成这项工作。一个简单的失误。