94 votes

L'exécution d'une commande dans une Tâche Grunt

Je suis l'aide de Grunt (selon les tâches en ligne de commande outil de construction pour les projets JavaScript) dans mon projet. J'ai créé une balise personnalisée et je me demandais si il est possible d'exécuter une commande.

Pour préciser, je suis en train d'utiliser la Fermeture de Modèles et de "la tâche" devrait appeler le fichier jar de pré-compiler le Soja fichier à un fichier javascript.

Je suis en cours d'exécution ce pot à partir de la ligne de commande, mais je veux le mettre comme une tâche.

Merci!!

105voto

cayuu Points 1563

Sinon, vous pouvez charger dans grunt plugins pour aider à cela:

grunt-shell exemple:

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

ou grunt-exec exemple:

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
  }
}

36voto

Rosarch Points 23501

Découvrez grunt.util.spawn:

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

20voto

blackdragon Points 978

J'ai trouvé une solution afin que je tiens à partager avec vous.

Je suis l'aide de grunt sous le nœud ainsi, pour appeler les commandes du terminal, vous devez exiger une " child_process module.

Par exemple,

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

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

J'espère que cela vous aide!

Cheers!

18voto

kikito Points 23229

Si vous utilisez la dernière grunt version 0.4.0rc7 au moment d'écrire ces lignes) à la fois grunt-exec et grunt-shell fail (ils ne semblent pas être mis à jour pour gérer les derniers grunt). D'autre part, child_process exec est asynchrone, ce qui est un problème.

J'ai fini à l'aide de Jake Trent de la solution, et l'ajout de shelljs en tant que dev dépendance sur mon projet je pouvais exécuter des tests facilement et de manière synchrone:

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

2voto

Pour async commandes shell de travail avec Grunt 0.4.x utilisation https://github.com/rma4ok/grunt-bg-shell.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X