2013-07-17 59 views
3

我有一个基于PHP的项目不会在grunt-php上运行。相反,我使用grunt-exec运行我的MAMP服务器进行开发。是否有可能在监视任务后运行任务?

exec: { 
    serverup: { 
    command: '/Applications/MAMP/bin/start.sh' 
    }, 
    serverdown: { 
    command: '/Applications/MAMP/bin/stop.sh' 
    } 
} 

在我的自定义开发任务中,我在监视任务之前运行MAMP启动脚本。然后,我试图在退出监视任务后停止MAMP服务器。

grunt.registerTask('default', ['jshint', 'concat', 'compass:dev', 'exec:serverup', 'watch', 'exec:serverdown']); 

但是,如果我用Ctrl-C退出任务,任务exec:serverdown似乎永远不会运行。有什么办法可以做到这一点?由于服务器永远不会关闭,因此该端口会一直运行,直到我手动运行停止脚本,并且如果我在再次运行默认任务之前再次运行该默认任务,则会出现错误。

如果不是,有没有其他方法可以完成同样的事情?

+0

你介意分享为什么它不会与咕噜的PHP工作? –

+0

@SindreSorhus我不确切地知道。我正在为[Koken](http://koken.me/)开发一个主题。我开始尝试使用grunt-php,但是我无法完成安装。我发布在Koken论坛上,并被开发人员告知,它无法使用内置的PHP服务器,这显然是grunt-php使用的。他没有说明为什么。 – raddevon

回答

2

你可以听上SIGINT并运行该脚本:

var exec = require('child_process').exec; 
process.on('SIGINT', function() { 
    exec('/Applications/MAMP/bin/stop.sh', function() { 
     process.exit(); 
    }); 
}); 

module.exports = function (grunt) {}; 
+0

谢谢你的回答。看起来很有希望。我会尽快试用并报告。 – raddevon

+0

我在这方面遇到了一些麻烦。我不确定这个应该在我的Gruntfile中的位置。如果我将它包含在'module.exports = function(grunt){...}'中,我不能再用Ctrl-C结束任务。如果我把它放在那个函数之外,我会得到'致命错误:grunt没有定义'。 – raddevon

+0

@raddevon我已经更新了答案。试试看。 –