Za dokończenie cyklu zbierałem się z 2 lata… no ale pora go dokończyć i mieć to z głowy :) W poprzedniej części po krótce napisałem czym jest gulp, w tej części skoncentrujemy się na tym jak mniej więcej (naprawdę mniej więcej) działa gulp i czym on się różni od grunta.
Główną i najważniejszą rzeczą w gulpie jest to, że działa on na strumieniach danych. Od czasu powstania *nix, strumienie są jednym z chyba najpotężniejszych narzędzi jakie mamy pod ręką w systemie (nie koniecznie ekhm win). Działa to mniej więcej na zasadzie rur, możemy jedną rurę podłączyć do drugiej. Teraz każda z tych rur, może zawierać jakiś filtr. Czyli łączymy jedno wyjście z drugim wejściem przy czym coś z tą "wodą" robimy na przykład "filtrujemy" przez sitko by zablokować jakieś kamyki.
W *nix, strumienie są zaimplementowane w shell z wykorzystaniem pipes |. W node jak i gulp jest to po prostu .pipe(). W trakcie wykonywania operacji na strumieniu jesteśmy wstanie zarówno wykorzystać bibliotekę która będzie działała bardziej "abstrakcyjnie" na naszym strumieniu, albo sami możemy coś z nim zrobić. To trochę wspomaga w rozdzieleniu odpowiedzialności – to znaczy, jesteśmy wstanie stworzyć abstrakcję która będzie odpowiedzialna za jedną i tylko jedną rzecz. Musielibyśmy naprawdę się napracować by móc zrobić więcej niż jedną rzecz na raz. Zresztą flow nasz sam w sobie wspomaga rozdzielenie odpowiedzialności:
.pipe(do1) .pipe(do2) .pipe(do3) .pipe(save)
Gulp wykorzystuje strumienie z node, więc jeżeli chcecie poznać dokładniej na jakiej zasadzie one działają zachęcam do zapoznania się z podręcznikiem dostępnym na github jak i dokumentacją node, dotyczącą strumieni.
Jak widzicie już na samym początku jest znacząca różnica pomiędzy gruntem a gulpem. Grunt który bazuje na konfiguracji (wszystko jest zdefiniowane globalnie, a potem wykorzystywane jako klocki przeważnie wymagające pośrednich kroków czy też folderów tymczasowych), i gulp bazujący na strumieniach, gdzie flow jest od góry w dół bez "pośredników".
Do tego, gulp stricte wykorzystuje to co daje nam node, czyli do częśći rzeczy nie potrzebujemy w ogóle pluginów (np.: usuwanie plików/folderów). Wystarczy, że wciągniemy bibliotekę noda.
Dlatego też API gulpa jest banalnie proste. Zawiera zaledwie 4 metody:
gulp.task– definiuje byt do którego możemy się odwołać z command line, ogólnie grupuje operację na strumieniach pod określoną nazwą.gulp.watch– odpala określoną funkcję jak tylko zmienią się plikigulp.src– zwraca strumień tylko do odczytu który potem może być wykorzystany przez .pipegulp.dest– zwraca strumień z możliwości jego zapisania, dokładnie mówiąc wszystkie pliki które trafią na to, zostaną zapisane.
Jak widać, dużo nauki nie ma. Oczywiście każda z funkcji przyjmuje różny set parametrów do przeczytania w dokumentacji. Warto przeczytać sekcję o asynchronizacji zadań – gdyż to jest pierwsza rzecz która pewnie wam będzie sprawiać problem ze względu na:
Note: The tasks will run in parallel (all at once), so don’t assume that the tasks will start/finish in order.
W sekcji o asynchronizacji, znajdziecie jeden z możliwych sposobów rozwiązania tego feature.
Mając podstawową wiedzę na temat metod jak i tego jak działa gulp możemy się domyśleć, że przeważnie nasz kod będzie wyglądał mniej więcej tak (pseudocode):
gulp.task task_name
return gulp.src file_lists
.pipe do_one_thing
.pipe do_another_thing
.pipe gulp.dest folder_name;
Przykład prawdziwy (obcięty do taska wyłącznie):
gulp.task('default', function() {
return gulp.src('foo.js')
.pipe(uglify())
.pipe(rename({ extname: '.min.js' }))
.pipe(gulp.dest('build/'));
});
Sądzę, że przykład jest samo opisujący się :) ale na wszelki wypadek:
Weź plik foo.js i go z minifikuj, następnie dodaj do niego rozszerzenie .min.js i zapisz w katalogu build.
Proste? Kurcze aż przyjemnie się to czyta :)
To tyle na dzisiaj, jeszcze tylko informacja gdzie warto szukać przykładowych plików gulpfile.js.
Jednym z takich miejsc są przepisy dostępne na github które pokazują jak wykorzystać gulp w określonej sytuacji w tym także jak odpalać taski seryjnie a nie konkurencyjnie.
Innym sposobem jest wyszukiwanie w github gulpfile.js czy też przeglądanie popularnych bibliotek JavaScript (przeważnie mają one i grunta i gulpa) czy też po prostu przejrzenie listy projektów które zostały zgłoszone przez użytkowników github. Ogólnie tego jest naprawdę dużo, wystarczy tylko poszukać :)
Do następnego razu, gdzie napiszemy krótki skrypt dla aplikacji webowej.















Co to jest Gulp.js? Część 2
Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl
[…] już ostatnia część dot. gulpa :) Tydzień temu opisałem ogólnie jak działa gulp. W tej zaś przejdziemy przez proces automatyzacji pracy. By nie komplikować sobie życia, […]
Dzięki za linki. Do zobaczenia za 2 lata ;)
oj tam za 2 :) juz jest czesc 3 i ostatnia ;) a i wlasnie pisze 2 dla yeomana :) wiec nie jest az tak zle :D
Comments are closed.