2013-06-11 12 views
16

Aby dostosować moje zadania do zadawania pytań, potrzebuję dostępu do nazwy zadania podanego w linii komend podczas uruchamiania pomruku.Jak uzyskać nazwę zadania pomrukowanego w wierszu poleceń?

Opcje nie stanowią problemu, ponieważ są dobrze udokumentowane (pomiary). Jest również dobrze udokumentowane, jak znaleźć nazwę zadania, podczas wykonywania zadania gruntowania.

Ale potrzebuję wcześniej dostępu do nazwy zadania.

Np użytkownik pisze grunt build --target=client

Podczas konfigurowania zadania grunt w moim Gruntfile.js, mogę używać grunt.option('target') dostać 'client'.

Ale jak uzyskać parametr build przed rozpoczęciem tworzenia zadania?

Wszelkie wskazówki są mile widziane!

Odpowiedz

25

Twój plik pomruk jest w zasadzie tylko funkcją. Spróbuj dodać tę linię do góry:

module.exports = function(grunt) { 
/*==> */ console.log(grunt.option('target')); 
/*==> */ console.log(grunt.cli.tasks); 

// Add your pre task code here... 

Biegając z grunt build --target=client powinno dać wyjście:

client 
[ 'build' ] 

W tym momencie można uruchomić dowolny kod trzeba przed Twoim zadaniem jest prowadzony w tym ustawieniu wartości z nowymi zależnościami.

+0

Ta odpowiedź jest poprawna teraz, gdy została zmieniona. Aby zobaczyć nazwę zadania podaną w wierszu poleceń, użyj: console.log (grunt.cli.tasks); Zadania to tablica – Zane

1

Możesz użyć do tego celu grunt.util.hooker.hook.

Przykład (część Gruntfile.coffee)

grunt.util.hooker.hook grunt.task, (opt) -> 
    if grunt.task.current and grunt.task.current.nameArgs 
    console.log "Task to run: " + grunt.task.current.nameArgs 

CMD:

C:\some_dir>grunt concat --cmp my_cmp 
Task to run: concat 
Running "concat:coffee" (concat) task 
Task to run: concat:coffee 
File "core.coffee" created. 

Done, without errors. 

Istnieje również Hack że wcześniej stosuje się do zapobiegania pewne wykonanie zadania:

grunt.util.hooker.hook grunt.task, (opt) -> 
    if grunt.task.current and grunt.task.current.nameArgs 
    console.log "Task to run: " + grunt.task.current.nameArgs 
    if grunt.task.current.nameArgs is "<some task you don't want user to run>" 
     console.log "Ooooh, not <doing smth> today :(" 
     exit() # Not valid. Don't know how to exit :), but will stop grunt anyway 

CMD, gdy dozwolone:

C:\some_dir>grunt concat:coffee --cmp my_cmp 
Running "concat:coffee" (concat) task 
Task to run: concat:coffee 
File "core.coffee" created. 

Done, without errors. 

CMD, gdy zapobiega:

C:\some_dir>grunt concat:coffee --cmp my_cmp 
Running "concat:coffee" (concat) task 
Task to run: concat:coffee 
Ooooh, not concating today :(
Warning: exit is not defined Use --force to continue. 

Aborted due to warnings. 
2

Lepszym sposobem jest użycie grunt.task.current który posiada informacje o aktualnie uruchomionego zadania, w tym nieruchomości name. W ramach zadania kontekst (tj. this) jest tym samym obiektem. Więc . . .

grunt.registerTask('foo', 'Foobar all the things', function() { 
    console.log(grunt.task.current.name); // foo 
    console.log(this.name); // foo 
    console.log(this === grunt.task.current); // true 
}); 

Jeśli build jest aliasem do innych zadań i po prostu chcesz wiedzieć, co polecenie zostało wpisane, które doprowadziły do ​​obecnego wykonania zadania, ja zazwyczaj korzystają process.argv[2].Jeśli przyjrzysz process.argv, zobaczysz, że argv[0] jest node (bo grunt jest procesem node), argv[1] jest grunt i argv[2] zadaniem jest rzeczywisty grunt (następnie jakichkolwiek params w pozostałej części argv).

Edycja:

Przykład wyjściowy console.log(grunt.task.current) na [email protected] od wewnątrz zadania (nie ma bieżącego zadania z nie bieżącego zadania).

{ 
    nameArgs: 'server:dev', 
    name: 'server', 
    args: [], 
    flags: {}, 
    async: [Function], 
    errorCount: [Getter], 
    requires: [Function], 
    requiresConfig: [Function], 
    options: [Function], 
    target: 'dev', 
    data: { options: { debugPort: 5858, cwd: 'server' } }, 
    files: [], 
    filesSrc: [Getter] 
} 
+0

'grunt.task.current' dał mi' undefined' z pomrukiem 0.4.5. Jakiej wersji używasz? – theUtherSide

+0

0.4.5. Czy robisz to z poziomu zadania? Bo jeśli nie, to "nieokreślone" ma sens. Dodam moje wyniki powyżej (zbyt niechlujny komentarz). – tandrewnichols

+0

Dzięki za wyjaśnienie, byłem w 'module.exports = function (grunt) {...', ale poza 'grunt.initConfig ...'. Wygląda na to, że 'grunt.task.current' nie jest tam dostępny. – theUtherSide

Powiązane problemy