Zwykle możemy uruchomić zadanie przełknięcia z konsoli za pomocą czegoś podobnego gulp mytask. Czy w ogóle mogę przekazać parametr do zadania przełknięcia? Jeśli to możliwe, pokaż przykład, jak to zrobić.
Naprawdę dobrze napisana odpowiedź, dzięki za przykłady!
Allen Rice,
jak można uzyskać do tego dostęp w javascript?
vini
Jeśli używasz łyka z yargsami, zwróć uwagę na następujące: Jeśli masz zadanie „klient” i nie chcesz używać yargs wbudowany Sprawdzanie parametrów wymaganych poleceń: polecenie („klient”, „Utwórz katalog klienta”)
suther
Zobacz mój komentarz poniżej, jeśli chcesz użyć wbudowanego parametru yargs, sprawdź wymagane „polecenia” razem z gulp: stackoverflow.com/a/41412558/1256697
Jeśli masz pewność, że żądany parametr znajduje się we właściwej pozycji, to flagi nie są potrzebne. ** Wystarczy użyć (w tym przypadku):
var option = process.argv[4];//set to '123'
ALE: ponieważ opcja może nie być ustawiona lub może znajdować się w innej pozycji, uważam, że lepszym pomysłem byłoby coś takiego:
var option, i = process.argv.indexOf("--option");if(i>-1){
option = process.argv[i+1];}
W ten sposób możesz obsługiwać odmiany wielu opcji, takich jak:
//task should still find 'option' variable in all cases
gulp mytask --newoption somestuff --option 123
gulp mytask --option 123--newoption somestuff
gulp mytask --flag --option 123
** Edycja: prawda dla skryptów węzłów, ale gulp interpretuje wszystko bez wiodącego „-” jako kolejnej nazwy zadania. Dlatego użycie gulp mytask 123zakończy się niepowodzeniem, ponieważ łyk nie może znaleźć zadania o nazwie „123”.
W „var option, i = process, argv.indexOf („ - opcja ”);” jest literówka. Uważam, że powinien to być proccess.argv.
Luis Paulo Lohmann
Ach, tak powinno. Poprawione Dzięki @luis
Trevedhek
Chciałem tylko sprawdzić flagę --dev, aby móc rozróżnić środowiska produkcyjne od niższych. To załatwia sprawę bez dodawania dodatkowych zależności. Podziękować!
b01
1
Dla mnie gulp myTask --productionwyniki są process.argvrówne[pathToNode, pathToGulp, 'myTask', '--production']
Sung Cho
2
Prawdopodobnie się zmieniło, widziałem kilka starych przykładów z tą samą różnicą. W każdym razie możesz po prostu debugować i sprawdzić swoją sprawę. To powinna być zaakceptowana odpowiedź, ponieważ nie ma zależności.
Juan
19
Przekazanie parametru do łyka może oznaczać kilka rzeczy:
Z wiersza poleceń do pliku gulp (już tutaj przykładowo).
Od głównej treści skryptu gulpfile.js po zadania gulp.
Z jednego zadania przełknięcia do innego zadania przełknięcia.
Oto podejście do przekazywania parametrów z głównego pliku gulp do zadania gulp. Przenosząc zadanie wymagające parametru do własnego modułu i zawijając go w funkcji (aby można było przekazać parametr):
// ./gulp-tasks/my-neat-task.js file
module.exports =function(opts){
opts.gulp.task('my-neat-task',function(){
console.log('the value is '+ opts.value );});};
//main gulpfile.js file//...do some work to figure out a value called val...var val ='some value';//pass that value as a parameter to the 'my-neat-task' gulp task
require('./gulp-tasks/my-neat-task.js')({ gulp: gulp, value: val});
Może się to przydać, jeśli masz wiele trudnych zadań i chcesz przekazać im przydatne konfiguracje środowiskowe. Nie jestem pewien, czy może działać między jednym zadaniem a drugim.
Odpowiedź Ethana całkowicie zadziałałaby. Z mojego doświadczenia wynika, że bardziej węzłowym sposobem jest używanie zmiennych środowiskowych. Jest to standardowy sposób konfigurowania programów wdrażanych na platformach hostingowych (np. Heroku lub Dokku).
Aby przekazać parametr z wiersza polecenia, wykonaj następujące czynności:
Rozwój:
gulp dev
Produkcja:
NODE_ENV=production gulp dev
Składnia jest inna, ale bardzo uniksowa i jest kompatybilna z Heroku, Dokku itp.
Możesz uzyskać dostęp do zmiennej w swoim kodzie pod adresem process.env.NODE_ENV
Musiałem odgadnąć środowisko na podstawie nazwy zadania, mam zadanie „dev” i „prod”.
Po uruchomieniu gulp prodpowinien być ustawiony na środowisko prod. Kiedy uruchamiam gulp devlub cokolwiek innego, powinno być ustawione na środowisko programistyczne.
W tym celu sprawdzam tylko nazwę uruchomionego zadania:
Poniżej podano użycie aliasu zgodnie z dokumentacją yargs. Możemy również znaleźć yargstam więcej funkcji i sprawić, że przejście z linii poleceń będzie jeszcze lepsze.
.alias (klucz, alias)
Ustaw nazwy kluczy jako równoważne, tak aby aktualizacje klucza były propagowane do aliasów i odwrotnie.
Opcjonalnie .alias () może przyjmować obiekt, który mapuje klucze na aliasy. Każdy klucz tego obiektu powinien być kanoniczną wersją opcji, a każda wartość powinna być ciągiem lub tablicą ciągów.
Odpowiedzi:
Jest to funkcja, bez której programy nie mogą zostać. Możesz spróbować yargs .
Możesz użyć tego w następujący sposób:
W kodzie na przykład:
Dla twojego zrozumienia:
Mam nadzieję, że możesz wziąć to stąd.
Jest jeszcze jedna wtyczka, której możesz użyć, minimalistycznie. Jest jeszcze jeden post, w którym są dobre przykłady zarówno dla yargów, jak i dla minimalistów: ( Czy można przekazać Gulpowi flagę, aby uruchamiała zadania na różne sposoby? )
źródło
(argv.production === undefined) ? false : true;
jest równoważne zargv.production !== undefined
.Jeśli chcesz uniknąć dodawania dodatkowych zależności, uznałem, że węzły
process.argv
są przydatne:Więc następujące:
powinien wyświetlać:
Jeśli masz pewność, że żądany parametr znajduje się we właściwej pozycji, to flagi nie są potrzebne. ** Wystarczy użyć (w tym przypadku):
ALE: ponieważ opcja może nie być ustawiona lub może znajdować się w innej pozycji, uważam, że lepszym pomysłem byłoby coś takiego:
W ten sposób możesz obsługiwać odmiany wielu opcji, takich jak:
** Edycja: prawda dla skryptów węzłów, ale gulp interpretuje wszystko bez wiodącego „-” jako kolejnej nazwy zadania. Dlatego użycie
gulp mytask 123
zakończy się niepowodzeniem, ponieważ łyk nie może znaleźć zadania o nazwie „123”.źródło
gulp myTask --production
wyniki sąprocess.argv
równe[pathToNode, pathToGulp, 'myTask', '--production']
Przekazanie parametru do łyka może oznaczać kilka rzeczy:
Oto podejście do przekazywania parametrów z głównego pliku gulp do zadania gulp. Przenosząc zadanie wymagające parametru do własnego modułu i zawijając go w funkcji (aby można było przekazać parametr):
Może się to przydać, jeśli masz wiele trudnych zadań i chcesz przekazać im przydatne konfiguracje środowiskowe. Nie jestem pewien, czy może działać między jednym zadaniem a drugim.
źródło
Istnieje oficjalny przepis na łyk, używając tego minimalistycznego .
https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
Podstawy używają minimist do oddzielania argumentów cli i łączenia ich ze znanymi opcjami:
Co by parsowało coś takiego
Więcej pełnych informacji w przepisie.
źródło
Jeśli chcesz używać parametrów środowiska i innych narzędzi, takich jak log, możesz użyć gulp-util
Aktualizacja
gulp-util jest teraz przestarzałe. Zamiast tego możesz użyć minimalistycznego .
źródło
Odpowiedź Ethana całkowicie zadziałałaby. Z mojego doświadczenia wynika, że bardziej węzłowym sposobem jest używanie zmiennych środowiskowych. Jest to standardowy sposób konfigurowania programów wdrażanych na platformach hostingowych (np. Heroku lub Dokku).
Aby przekazać parametr z wiersza polecenia, wykonaj następujące czynności:
Rozwój:
gulp dev
Produkcja:
NODE_ENV=production gulp dev
Składnia jest inna, ale bardzo uniksowa i jest kompatybilna z Heroku, Dokku itp.
Możesz uzyskać dostęp do zmiennej w swoim kodzie pod adresem
process.env.NODE_ENV
MYAPP=something_else gulp dev
ustawiłbym
process.env.MYAPP === 'something_else'
Ta odpowiedź może dać ci kilka innych pomysłów.
źródło
Oto moja próbka, jak go używać. Dla zadania css / less. Można zastosować dla wszystkich.
źródło
Oto inny sposób bez dodatkowych modułów:
Musiałem odgadnąć środowisko na podstawie nazwy zadania, mam zadanie „dev” i „prod”.
Po uruchomieniu
gulp prod
powinien być ustawiony na środowisko prod. Kiedy uruchamiamgulp dev
lub cokolwiek innego, powinno być ustawione na środowisko programistyczne.W tym celu sprawdzam tylko nazwę uruchomionego zadania:
źródło
Jeśli używasz łyka z yargsami, zwróć uwagę na następujące kwestie :
Jeśli masz zadanie „klient” i nie chcesz korzystać z yargs wbudowany w Sprawdzanie parametrów dla wymaganych poleceń:
.command("customer <place> [language]","Create a customer directory")
nazwij to za pomocą:yargs zawsze zgłasza błąd, że do połączenia nie przypisano wystarczającej liczby poleceń, nawet jeśli masz !! -
Spróbuj i dodaj tylko cyfrę do polecenia (aby nie była równa nazwie zadania gulp) ... i zadziała:
.command("customer1 <place> [language]","Create a customer directory")
To dlatego łyk zdaje się wyzwalać zadanie, zanim yargs będzie mógł sprawdzić ten wymagany parametr. Rozpracowanie tego kosztowało mnie wiele godzin.
Mam nadzieję, że to ci pomoże ...
źródło
Wiem, że spóźniłem się z odpowiedzią na to pytanie, ale chciałbym dodać coś do odpowiedzi na @Ethan, najlepiej głosowaną i zaakceptowaną odpowiedź.
Możemy użyć,
yargs
aby uzyskać parametr wiersza poleceń, a tym samym możemy również dodać własny alias dla niektórych parametrów, takich jak follow.Prosimy zapoznać się z tym linkiem, aby uzyskać więcej informacji. https://github.com/yargs/yargs/blob/HEAD/docs/api.md
Poniżej podano użycie aliasu zgodnie z dokumentacją
yargs
. Możemy również znaleźćyargs
tam więcej funkcji i sprawić, że przejście z linii poleceń będzie jeszcze lepsze.źródło
Po prostu załaduj go do nowego obiektu w trakcie procesu
process.gulp = {}
i popatrz na zadanie.źródło