내가 사용하고 그런트 내 프로젝트에 (자바 스크립트 프로젝트를위한 작업 기반 명령 줄 빌드 도구). 사용자 지정 태그를 만들었고 여기에 명령을 실행할 수 있는지 궁금합니다.
명확히하기 위해 클로저 템플릿을 사용하려고하는데 "작업"은 jar 파일을 호출하여 Soy 파일을 자바 스크립트 파일로 미리 컴파일해야합니다.
명령 줄에서이 jar를 실행하고 있지만 작업으로 설정하고 싶습니다.
답변:
또는 다음을 돕기 위해 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
잘 모르겠어요 그것은 창에 작동합니다
최신 grunt 버전 (이 글 작성 당시 0.4.0rc7)을 사용하는 경우 grunt-exec 및 grunt-shell 모두 실패합니다 (최신 grunt를 처리하도록 업데이트되지 않은 것 같습니다). 반면에 child_process의 exec는 비동기이므로 번거 롭습니다.
결국 Jake Trent의 솔루션 을 사용하고 내 프로젝트에 대한 dev 종속성으로 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
Windows 에서 잘 작동합니다
남자들은 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에서 작동하는 비동기 셸 명령의 경우 https://github.com/rma4ok/grunt-bg-shell을 사용 하십시오 .