L’esecuzione di un comando in un Grugnito Attività

Sto usando Grunt (task-based compilazione da riga di comando strumento per JavaScript progetti) nel mio progetto. Ho creato un tag personalizzato e mi chiedo se è possibile eseguire un comando in esso.

Per chiarire, sto cercando di utilizzare la Chiusura di Modelli e “l’attività” deve chiamare il file jar per pre-compilare la Soia file a un file javascript.

Sto eseguendo questo barattolo da linea di comando, ma voglio impostare come un compito.

InformationsquelleAutor JuanO | 2012-05-04

 

6 Replies
  1. 103

    In alternativa, è possibile caricare in grugnito plugin per aiutare questo:

    grunt-shell esempio:

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

    o grunt-exec esempio:

    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
      }
    }
    • Qualcuno sa se uno di questi due è utilizzabile su Windows?
    • Per i casi più semplici, entrambi hanno lavorato bene per me sotto Windows.
    • Non ho potuto ottenere immediatamente grunt-shell per funzionare con Windows+Cygwin, ma ho avuto la migliore fortuna con grunt-exec.
    • C’è un modo per utilizzare grugnito-exec in modo sincrono? Sarebbe bello catena di comandi insieme
    • basta mettere i comandi all’interno di un batch o shell che chiama i comandi è in ordine di preferenza. O si definiscono attività ad esempio mycmds e scrivere "exec:cmd1", "exec:cmd2" allora hai anche in modo sincrono ordine.
  2. 34

    Check out grunt.util.spawn:

    grunt.util.spawn({
      cmd: 'rm',
      args: ['-rf', '/tmp'],
    }, function done() {
      grunt.log.ok('/tmp deleted');
    });
    • con opts: {stdio: 'inherit'}, si può vedere l’output del comando
    • Nota: cmd param dovrebbe essere una stringa, non un array.
    • Questo richiede ora grunt-legacy-util plugin. Si consiglia l’utilizzo di require('child_process').spawn(), invece.
  3. 19

    Ho trovato una soluzione che mi piacerebbe condividere con voi.

    Sto usando grugnito sotto il nodo e quindi, per chiamare comandi da terminale è necessario richiedere ‘child_process’ modulo.

    Per esempio,

    var myTerminal = require("child_process").exec,
        commandToBeExecuted = "sh myCommand.sh";
    
    myTerminal(commandToBeExecuted, function(error, stdout, stderr) {
        if (!error) {
             //do something
        }
    });
    • Un approccio migliore è quello di utilizzare un plugin (o scrivere la propria) per mantenere la vostra grugnito config come config e non il codice. grunt-shell & grugnito-exec sono due esempi.
    • Come si utilizza sh prima sh mayCommand.sh io non sono sicuro che avrebbe funzionato su windows
    • Non funziona perché è di scripting bash. Sto correndo sotto Unix OS
  4. 18

    Se si sta utilizzando l’ultima grugnito versione 0.4.0rc7 al momento della stesura di questo) sia grugnito-exec e grunt-shell esito negativo (non sembrano essere aggiornato per gestire l’ultimo grugnito). D’altra parte, child_process di exec è asincrono, che è una seccatura.

    Ho finito per usare Jake Trento e soluzione, e l’aggiunta di shelljs come dev dipendenza sul mio progetto, così ho potuto solo eseguire test facilmente e in modo sincrono:

    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');
    });
    • fyi grunt-shell sta lavorando bene con grunt v0.4.5 sotto Windows
    • Penso che shelljs è una grande soluzione perché permette il nodo app per accedere alla shell, e ti dà un maggiore controllo su di esso che il grugnito addons da solo.
  5. 14

    Ragazzi sono di puntamento child_process, ma provare a utilizzare execSync di vedere l’output..

    grunt.registerTask('test', '', function () {
            var exec = require('child_process').execSync;
            var result = exec("phpunit -c phpunit.xml", { encoding: 'utf8' });
            grunt.log.writeln(result);
    });
    • Ottima soluzione senza plugin aggiuntivi.
    • Ho cercato di ottenere eseguire l’esecuzione di attività per un giorno, e, infine, una soluzione semplice che funziona!

Lascia un commento