2013-11-21 7 views
19

Mam plik kompresji Grunt. Mój plik build ma zadanie, które wygląda następująco:Parametry wiersza poleceń programu 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']); 

Obecnie mogę uruchomić następujące polecenia z wiersza poleceń:

> grunt customTask 

wszystko działa w porządku. Jednak muszę dodać możliwość zrobienia czegoś takiego:

> grunt customTask --myParam=myValue 

muszę patrzeć na wartości myparam w moim „dev” target zadań. Jednak nie mogę wymyślić, jak to zrobić. Byłbym szczęśliwy, gdybym mógł wydrukować wartość myParam po uruchomieniu myTask: dev. Innymi słowy, Chciałbym zobaczyć, co następuje po uruchomieniu

> grunt customTask 

> grunt customTask --myParam=hello 
You entered hello 

> grunt customTask-Test 

> grunt customTask-Test --myParam=hello 

Jak zrobić coś takiego?

+1

Odpowiedzi na to pytanie udzielono już wcześniej: http://stackoverflow.com/questions/17012102/grunt-command-line- arguments-not-working –

Odpowiedz

34

Wszystko to zostało wyjaśnione na stronie grunt.option.

W twoim przypadku, można uzyskać wartość myParam z:

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

Domyślne argumenty to standardowe idiotyki JavaScript: 'grunt.option ('myParam') || "defaultValue". – Claudiu

3

alternatywny sposób: można użyć tablicę process.argv, jak można w aplikacji regularnych węzła.

GruntJS jest oczywiście zbudowany na NodeJS.

Użyłem tej techniki, aby przekazać moje argumenty wiersza polecenia Grunt do mojego procesu Node, wywoływanego przez grunt-nodemon.

1

Można również użyć tablicę process.argv te odczytać argumenty wiersza poleceń z pomrukiem

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

pierwsze & drugie argumenty są komenda node i nazwę skryptu.

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

użyciu grunt-execute

+0

To był świetny sposób dla mnie, aby moje zadanie zegarka w 'initConfig' było inne w zależności od tego, które zadanie zostało wywołane. Chciałem ustawić zmienną, która przejdzie do mojego zadania 'watch' w oparciu o to, co było zadaniem, ale przed uruchomieniem' grunt.registerTask', nie ma niczego w 'grunt.task.current.name'. Dzięki za zamieszczenie tego! – Groovetrain

+0

Nie ma za co, cieszę się, że pomogłem komuś i tak z tym komentarzem –

2

zrobiłem przykład użycia, gdzie można przejść do modułu, gdzie chcę mój css.min być tworzone za pomocą tego wiersza poleceń:

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