我目前正在尝试执行几个步骤,需要将任务产生到子进程中。例如:当Grunt退出时杀死产生的进程
- 观看文件
- 启动我的静态网站生成的预览服务器
,我可以很容易地使用一个任务,如grunt-concurrent有这两个同时运行。但是,当我退出grunt时,子进程(在这种情况下 - 我使用grunt-shell运行的静态站点生成器)继续运行。我想让这些任务同时运行 - 但是也会让他们在咕噜声退出时被杀死。
想法?
我目前正在尝试执行几个步骤,需要将任务产生到子进程中。例如:当Grunt退出时杀死产生的进程
,我可以很容易地使用一个任务,如grunt-concurrent有这两个同时运行。但是,当我退出grunt时,子进程(在这种情况下 - 我使用grunt-shell运行的静态站点生成器)继续运行。我想让这些任务同时运行 - 但是也会让他们在咕噜声退出时被杀死。
想法?
有没有理由不使用grunt-contrib-connect来启动项目根目录中的服务器?
如果有可能做到这一点,而不是使用咕噜壳,服务器将自动关闭,当你的咕噜过程出来
不知道这是如何工作与咕噜壳。但是,如果你想建立一个自定义的咕噜任务运行服务器,你可以尝试财产以后这样的:
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');
});
不幸的是,我尝试过没有成功(没有写入消息或服务器被终止)。 – Pat 2014-03-26 20:54:08
这是我口味最好的答案。简单,直截了当。没有学习曲线..如果事情很简单,我真的不支持使用库。从技术上讲,grunt shell插件应该在内部完成。一个简单的小姐。 – 2015-05-10 11:42:37
也许这就是为什么grunt-exit已创建。
显然,grunt-shell
不处理process
退出事件:https://github.com/sindresorhus/grunt-shell/blob/master/tasks/shell.js
因此,我怀疑你的咕噜进程退出和grunt-shell
从不警告它的父进程正在停止子进程。
例如,grunt-concurrent
确实杀死其子进程,因为我们可以在这里看到:
process.on('exit', function() {
cpCache.forEach(function (el) {
el.kill();
});
});
来源:https://github.com/sindresorhus/grunt-concurrent/blob/master/tasks/concurrent.js#L55
因此,使用grunt-shell
不会为你工作。
一个解决方案是在您的Gruntfile中需要wintersmith
并在自定义任务中以编程方式运行它。
看到我的回答在https://stackoverflow.com/a/32057486/626810。
当你有明确需要调用的脚本时(例如:当该进程被守护进程时),这非常有用。
伟大的一点 - 但不幸的没有。我正在使用Wintersmith作为我的站点生成器(它使用Connect服务器) - 但我想避免必须复制该预览服务器的逻辑。 – dtuckernet 2013-05-08 01:32:05