Answers:
另外,您可以加载grunt插件来帮助解决此问题:
grunt-shell示例:
shell: {
make_directory: {
command: 'mkdir test'
}
}
或grunt-exec示例:
exec: {
remove_logs: {
command: 'rm -f *.log'
},
list_files: {
command: 'ls -l **',
stdout: true
},
echo_grunt_version: {
command: function(grunt) { return 'echo ' + grunt.version; },
stdout: true
}
}
grunt-shell
使用Windows + Cygwin,但我的运气更好grunt-exec
。
"exec:cmd1", "exec:cmd2"
那么您也将具有同步顺序。
签出grunt.util.spawn
:
grunt.util.spawn({
cmd: 'rm',
args: ['-rf', '/tmp'],
}, function done() {
grunt.log.ok('/tmp deleted');
});
opts: {stdio: 'inherit'},
您一起可以看到命令的输出
grunt-legacy-util
插件。建议require('child_process').spawn()
改为使用。
我已经找到了解决方案,所以我想与您分享。
我在节点下使用grunt,因此,要调用终端命令,您需要使用“ child_process”模块。
例如,
var myTerminal = require("child_process").exec,
commandToBeExecuted = "sh myCommand.sh";
myTerminal(commandToBeExecuted, function(error, stdout, stderr) {
if (!error) {
//do something
}
});
sh
之前所用,sh mayCommand.sh
我不确定它是否可以在Windows上使用
如果您使用的是最新的grunt版本(在撰写本文时为0.4.0rc7),则grunt-exec和grunt-shell都将失败(它们似乎没有更新以处理最新的grunt)。另一方面,child_process的exec是异步的,这很麻烦。
我最终使用了Jake Trent的解决方案,并在我的项目中添加了shelljs作为开发依赖项,因此我可以轻松,同步地运行测试:
var shell = require('shelljs');
...
grunt.registerTask('jquery', "download jquery bundle", function() {
shell.exec('wget http://jqueryui.com/download/jquery-ui-1.7.3.custom.zip');
});
grunt-shell
可以正常工作grunt v0.4.5
伙计们指向child_process,但尝试使用execSync来查看输出。
grunt.registerTask('test', '', function () {
var exec = require('child_process').execSync;
var result = exec("phpunit -c phpunit.xml", { encoding: 'utf8' });
grunt.log.writeln(result);
});
对于使用Grunt 0.4.x的异步shell命令,请使用https://github.com/rma4ok/grunt-bg-shell。