2013-11-21 17 views
19

Ho un file di build Grunt. Il mio file build ha un compito che è simile al seguente:Parametri riga di comando grunt

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

Attualmente, posso correre quanto segue dalla riga di comando:

> grunt customTask 

Tutto funziona bene. Tuttavia, ho bisogno di aggiungere la possibilità di fare qualcosa di simile:

> grunt customTask --myParam=myValue 

ho bisogno di guardare al valore myParam nel mio target compito "dev". Tuttavia, non riesco a capire come farlo. Sarei felice se potessi stampare il valore di myParam quando myTask: dev è in esecuzione. In altre parole, mi piacerebbe vedere di seguito quando viene eseguito

> grunt customTask 

> grunt customTask --myParam=hello 
You entered hello 

> grunt customTask-Test 

> grunt customTask-Test --myParam=hello 

Come faccio a fare qualcosa di simile?

+1

Questa risposta è la seguente: http://stackoverflow.com/questions/17012102/grunt-command-line- argomenti non funzionanti –

risposta

34

Questo è tutto spiegato nella pagina grunt.option.

Nel tuo caso, si potrebbe ottenere il valore di myParam con:

var target = grunt.option('myParam'); 
+2

Per gli argomenti predefiniti è possibile utilizzare l'idioma JavaScript standard: 'grunt.option ('myParam') || 'DefaultValue''. – Claudiu

3

Un modo alternativo: è possibile utilizzare la matrice process.argv, proprio come è possibile in un normale nodo app.

GruntJS è, ovviamente, costruito su NodeJS.

Ho usato questa tecnica per inoltrare i miei argomenti di riga di comando Grunt al mio processo di nodo, chiamato da grunt-nodemon.

1

è anche possibile utilizzare la matrice process.argv te leggere i argomenti della riga di comando dal grugnito

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

primi & secondo argomento sono il comando node e il nome dello script.

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

utilizzando grunt-execute

+0

Questo è stato un ottimo modo per far sì che la mia attività di controllo in 'initConfig 'fosse diversa a seconda di quale attività veniva chiamata. Volevo impostare una variabile da passare al mio task 'watch' in base a quale era l'attività, ma prima di eseguire' grunt.registerTask', non c'è nulla in 'grunt.task.current.name'. Grazie per aver postato questo! – Groovetrain

+0

Prego, sono felice di aver comunque aiutato qualcuno con questo commento –

2

ho fatto un esempio di utilizzo, dove posso passare il modulo in cui voglio che il mio css.min da creare tramite questa riga di comando:

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