Running a command in a Grunt Task

后端 未结 6 1974
借酒劲吻你
借酒劲吻你 2020-12-02 07:43

I\'m using Grunt (task-based command line build tool for JavaScript projects) in my project. I\'ve created a custom tag and I am wondering if it is possible to run a command

相关标签:
6条回答
  • 2020-12-02 08:05

    If you are using the latest grunt version (0.4.0rc7 at the time of this writing) both grunt-exec and grunt-shell fail (they don't seem to be updated to handle the latest grunt). On the other hand, child_process's exec is async, which is a hassle.

    I ended up using Jake Trent's solution, and adding shelljs as a dev dependency on my project so I could just run tests easily and synchronously:

    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');
    });
    
    0 讨论(0)
  • 2020-12-02 08:05

    Guys are pointing child_process, but try to use execSync to see output..

    grunt.registerTask('test', '', function () {
            var exec = require('child_process').execSync;
            var result = exec("phpunit -c phpunit.xml", { encoding: 'utf8' });
            grunt.log.writeln(result);
    });
    
    0 讨论(0)
  • 2020-12-02 08:11

    I've found a solution so I'd like to share with you.

    I'm using grunt under node so, to call terminal commands you need to require 'child_process' module.

    For example,

    var myTerminal = require("child_process").exec,
        commandToBeExecuted = "sh myCommand.sh";
    
    myTerminal(commandToBeExecuted, function(error, stdout, stderr) {
        if (!error) {
             //do something
        }
    });
    
    0 讨论(0)
  • 2020-12-02 08:14

    For async shell commands working with Grunt 0.4.x use https://github.com/rma4ok/grunt-bg-shell.

    0 讨论(0)
  • 2020-12-02 08:16

    Check out grunt.util.spawn:

    grunt.util.spawn({
      cmd: 'rm',
      args: ['-rf', '/tmp'],
    }, function done() {
      grunt.log.ok('/tmp deleted');
    });
    
    0 讨论(0)
  • 2020-12-02 08:17

    Alternatively you could load in grunt plugins to help this:

    grunt-shell example:

    shell: {
      make_directory: {
        command: 'mkdir test'
      }
    }
    

    or grunt-exec example:

    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
      }
    }
    
    0 讨论(0)
提交回复
热议问题