[javascript] Grunt 태스크에서 명령 실행

내가 사용하고 그런트 내 프로젝트에 (자바 스크립트 프로젝트를위한 작업 기반 명령 줄 빌드 도구). 사용자 지정 태그를 만들었고 여기에 명령을 실행할 수 있는지 궁금합니다.

명확히하기 위해 클로저 템플릿을 사용하려고하는데 “작업”은 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.util.spawn:

grunt.util.spawn({
  cmd: 'rm',
  args: ['-rf', '/tmp'],
}, function done() {
  grunt.log.ok('/tmp deleted');
});


답변

해결책을 찾았으므로 여러분과 공유하고 싶습니다.

노드 아래에서 grunt를 사용하고 있으므로 터미널 명령을 호출하려면 ‘child_process’모듈이 필요합니다.

예를 들면

var myTerminal = require("child_process").exec,
    commandToBeExecuted = "sh myCommand.sh";

myTerminal(commandToBeExecuted, function(error, stdout, stderr) {
    if (!error) {
         //do something
    }
});


답변

최신 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');
});


답변

남자들은 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을 사용 하십시오 .


답변