web-dev-qa-db-fra.com

Paramètres de ligne de commande Grunt

J'ai un fichier de construction Grunt. Mon fichier de génération a une tâche qui ressemble à ceci:

myTask: {
  options: {
    configFile: "config/default.js",
    args: {   }
  },
  dev: {
    configFile: 'config/local.js',
    options: { args: {} },
  },
  test: {
    configFile: 'config/remote.js',
    options: { args: {} }
  }
}

...

grunt.registerTask('customTask', ['myTask:dev']);
grunt.registerTask('customTask-Test', ['myTask:test']);

Actuellement, je peux exécuter ce qui suit à partir de la ligne de commande:

> grunt customTask

Tout fonctionne bien. Cependant, je dois ajouter la possibilité de faire quelque chose comme ceci:

> grunt customTask --myParam=myValue

J'ai besoin de regarder la valeur de myParam dans ma cible de tâche "dev". Cependant, je ne peux pas comprendre comment le faire. Je serais heureux si je pouvais simplement imprimer la valeur de myParam lorsque myTask: dev est exécuté. En d'autres termes, j'aimerais voir ce qui suit lors de l'exécution

> grunt customTask

> grunt customTask --myParam=hello
You entered hello

> grunt customTask-Test

> grunt customTask-Test --myParam=hello

Comment faire quelque chose comme ça?

24
SL Dev

Tout cela est expliqué dans la page grunt.option .

Dans votre cas, vous pouvez obtenir la valeur de myParam avec:

var target = grunt.option('myParam');
37
badsyntax

J'ai fait un exemple d'utilisation, où je peux passer le module où je veux que mon css.min soit créé via cette ligne de commande:

> grunt cssmin --target=my_module 

Gruntfile.js

module.exports = function(grunt) {    
 var module = grunt.option('target'); //get value of target, my_module
 var cssminPath = 'assets/' + module + '/css/all.css';

 grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    cssmin:{
        css: {
            files: [{
                    src: [
                        'bower_components/bootstrap/dist/css/bootstrap.min.css',
                    ],
                    dest: cssminPath
                }]
        }
    },
  });
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.registerTask('default', ['cssmin']);
}
5
Ricardo

Une autre manière: vous pouvez utiliser le process.argv array, comme vous le pouvez dans une application Node.

GruntJS est, bien sûr, construit sur NodeJS.

J'ai utilisé cette technique afin de transmettre mes arguments de ligne de commande Grunt à mon processus Node, appelé par grunt-nodemon.

4
Jonathan

Vous pouvez également utiliser le process.argv array te lit les arguments de la ligne de commande depuis grunt

var args = process.argv;
runScript(args[2], args[3]);

les premier et deuxième arguments sont la commande node et le nom du script.

execute: {
    target: {
      options: {
         args : [arg1, arg2]
      },
      src: ['script.js']
    }
}

en utilisant grunt-execute

2
Thami Bouchnafa