我使用的步兵在我的项目(JavaScript的项目基于任务的命令行构建工具)。 我创建了一个自定义的标签,我想知道是否有可能运行一个命令进去。
为了澄清,我正在尝试使用Closure模板和“任务”应该调用jar文件的大豆文件预编译到JavaScript文件。
我从命令行运行这个罐子,但我想将其设置为一个任务。
我使用的步兵在我的项目(JavaScript的项目基于任务的命令行构建工具)。 我创建了一个自定义的标签,我想知道是否有可能运行一个命令进去。
为了澄清,我正在尝试使用Closure模板和“任务”应该调用jar文件的大豆文件预编译到JavaScript文件。
我从命令行运行这个罐子,但我想将其设置为一个任务。
另外,您可以在加载插件的呼噜声,以帮助这一点:
咕噜-壳例如:
shell: {
make_directory: {
command: 'mkdir test'
}
}
或咕噜-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.util.spawn
:
grunt.util.spawn({
cmd: 'rm',
args: ['-rf', '/tmp'],
}, function done() {
grunt.log.ok('/tmp deleted');
});
我已经找到了解决办法,所以我想与大家分享。
我使用的呼噜声在这样的节点,给你打电话需要,要求“child_process”模块终端命令。
例如,
var myTerminal = require("child_process").exec,
commandToBeExecuted = "sh myCommand.sh";
myTerminal(commandToBeExecuted, function(error, stdout, stderr) {
if (!error) {
//do something
}
});
如果您使用的是最新版本的咕噜(0.4.0rc7在写这篇文章的时候)都咕噜-exec和咕噜壳失败(他们似乎没有进行更新,以处理最新的呼噜声)。 在另一方面,child_process的exec是异步,这是一件麻烦事。
最后我用杰克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');
});
专家们指点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);
});
对于咕噜0.4.x使用异步工作shell命令https://github.com/rma4ok/grunt-bg-shell 。