SlideShare a Scribd company logo
Wiktor Toporek
O mnie
• Programista PHP
• Pasjonat JavaScriptu
• http://wiktortoporek.name/blog
VS
konfiguracja ponad
kodem
brak wbudowanych
tasków
każdy task jest
pluginem
kod ponad
konfiguracją
filozofia streamów
trochę szybszy?
GulpGrunt
Jak zacząć?
npm i -g gulp
npm init
npm i gulp --save-dev
touch gulpfile.js
Hello World
var gulp = require('gulp');
gulp.task('hello', function () {
console.log('Hello World!');
});
gulp hello
stream
gulp.src()
gulp.dest()
copy
var gulp = require('gulp');
gulp.task('copy', function () {
return gulp.src('node_modules/bootstrap/dist/css/*.min.css')
.pipe(gulp.dest('./dist/css'));
});
gulp copy
Kompilacja SASS
var gulp = require('gulp'),
sass = require('gulp-sass');
npm i gulp-sass --save-dev
gulp sass
gulp.task('sass', function () {
return gulp.src('./sass/**/*.scss')
.pipe(sass())
.pipe(gulp.dest('./css'));
});
Minifikacja CSS
npm i gulp-shorthand gulp-cssnano 

gulp-uncss --save-dev
var gulp = require('gulp'),
shorthand = require('gulp-shorthand'),
cssnano = require('gulp-cssnano'),
uncss = require('gulp-uncss');
gulp minifycss
gulp.task('minifycss', function () {
return gulp.src('./css/**/*.css')
.pipe(shorthand())
.pipe(cssnano())
.pipe(uncss({
html: [
'index.html',
'subpage/**/*.html',
'http://example.com'
]
}))
.pipe(gulp.dest('./dist/css'));
});
Babel
var gulp = require('gulp'),
babel = require('gulp-babel');
gulp.task('compile', function () {
return gulp.src('src/**/*.js')
.pipe(babel({
presets: ['es2015']
}))
.pipe(gulp.dest('dist/js'));
});
Sourcemapy
var gulp = require('gulp'),
sourcemaps = require('gulp-sourcemaps'),
babel = require('gulp-babel'),
concat = require('gulp-concat');
gulp.task('compile', function () {
return gulp.src('src/**/*.js')
.pipe(sourcemaps.init())
.pipe(babel({
presets: ['es2015']
}))
.pipe(concat('all.js'))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist/js'));
});
Watch
Watch
var gulp = require('gulp');
gulp.task('watch', function () {
gulp.watch('js/**/*.js', ['compile']);
gulp.watch('sass/**/*.scss', ['sass']);
});
gulp.task('compile', function () {
...
});
gulp.task('sass', function () {
...
});
SSH
var gulp = require('gulp');
var GulpSSH = require('gulp-ssh');
var config = {
host: 'example.com',
port: 22,
username: 'www-data',
privateKey: fs.readFileSync('/Users/wiktor/.ssh/id_rsa')
};
var gulpSSH = new GulpSSH({
ignoreErrors: false,
sshConfig: config
});
SSH
gulp.task('deploy', function () {
return gulpSSH
.shell([
'cd /var/www/example.com/htdocs',
'git pull',
'npm install',
'npm test'
], {filePath: 'deploy.log'})
.pipe(gulp.dest('logs'))
});
Uwaga na
asynchroniczność
Gdy nie mamy streamu
var gulp = require('gulp');
gulp.task('hello', function () {
setTimeout(function() {
console.log('Hello');
}, 2000);
});
Gdy nie mamy streamu
var gulp = require('gulp');
gulp.task('hello', function (doneCallback) {
setTimeout(function() {
console.log('Hello');
doneCallback(null);
}, 2000);
});
Tworzenie zależności
var gulp = require('gulp');
gulp.task('hello', function (doneCallback) {
setTimeout(function() {
console.log('Hello');
doneCallback(null);
}, 2000);
});
gulp.task('helloworld', ['hello'], function() {
console.log('World');
});
Tworzenie zależności
Zależności działają
asynchronicznie
var gulp = require('gulp');
gulp.task('hello', function (doneCallback) {
setTimeout(function() {
console.log('Hello');
doneCallback(null);
}, 2000);
});
gulp.task('world', function() {
console.log('World');
});
gulp.task('helloworld', ['hello', 'world']);
Zależności działają
asynchronicznie
Sekwencja zadań
https://www.npmjs.com/package/gulp-sync
Łączenie streamów
https://github.com/gulpjs/gulp/blob/master/docs/recipes/
using-multiple-sources-in-one-task.md
Wtyczki gulpowe
często są uniwersalne
z gulpem łączy je tylko prefix "gulp-"
gulp.src('pytania')
.pipe(wiktor());

More Related Content

Viewers also liked

Bitcoin - (nie)udany eksperyment?
Bitcoin - (nie)udany eksperyment?Bitcoin - (nie)udany eksperyment?
Bitcoin - (nie)udany eksperyment?
The Software House
 
Tester - przyjaciel czy wróg programisty?
Tester - przyjaciel czy wróg programisty?Tester - przyjaciel czy wróg programisty?
Tester - przyjaciel czy wróg programisty?
The Software House
 
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
The Software House
 
Deployment z Ansible
Deployment z AnsibleDeployment z Ansible
Deployment z Ansible
The Software House
 
e2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końcee2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końce
The Software House
 
Pi razy drzwi - o szacowaniu projektów
Pi razy drzwi - o szacowaniu projektówPi razy drzwi - o szacowaniu projektów
Pi razy drzwi - o szacowaniu projektów
The Software House
 
Wielkie protokoły wielkich ludzi
Wielkie protokoły wielkich ludziWielkie protokoły wielkich ludzi
Wielkie protokoły wielkich ludzi
The Software House
 
Varnish
VarnishVarnish
Deploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacjiDeploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacji
The Software House
 
TDD w iOS
TDD w iOS TDD w iOS
TDD w iOS
The Software House
 
Dependency Injection w Androidzie
Dependency Injection w AndroidzieDependency Injection w Androidzie
Dependency Injection w Androidzie
The Software House
 
Docker
DockerDocker
Testing and symfony2
Testing and symfony2Testing and symfony2
Testing and symfony2
The Software House
 
You Shall Not Pass - Security in Symfony
You Shall Not Pass - Security in SymfonyYou Shall Not Pass - Security in Symfony
You Shall Not Pass - Security in Symfony
The Software House
 
Gherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w ITGherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w IT
The Software House
 
Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng
Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng
Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng
The Software House
 
Jak ugryźć Ruby, żeby nie połamać zębów?
Jak ugryźć Ruby, żeby nie połamać zębów?Jak ugryźć Ruby, żeby nie połamać zębów?
Jak ugryźć Ruby, żeby nie połamać zębów?
The Software House
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w Railsach
The Software House
 
O wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyce
O wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyceO wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyce
O wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyce
The Software House
 
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
The Software House
 

Viewers also liked (20)

Bitcoin - (nie)udany eksperyment?
Bitcoin - (nie)udany eksperyment?Bitcoin - (nie)udany eksperyment?
Bitcoin - (nie)udany eksperyment?
 
Tester - przyjaciel czy wróg programisty?
Tester - przyjaciel czy wróg programisty?Tester - przyjaciel czy wróg programisty?
Tester - przyjaciel czy wróg programisty?
 
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
Inżynieria społeczna jako element testów bezpieczeństwa - tylko teoria, czy j...
 
Deployment z Ansible
Deployment z AnsibleDeployment z Ansible
Deployment z Ansible
 
e2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końcee2e frameworks - czyli kij ma dwa końce
e2e frameworks - czyli kij ma dwa końce
 
Pi razy drzwi - o szacowaniu projektów
Pi razy drzwi - o szacowaniu projektówPi razy drzwi - o szacowaniu projektów
Pi razy drzwi - o szacowaniu projektów
 
Wielkie protokoły wielkich ludzi
Wielkie protokoły wielkich ludziWielkie protokoły wielkich ludzi
Wielkie protokoły wielkich ludzi
 
Varnish
VarnishVarnish
Varnish
 
Deploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacjiDeploy appki na iOS, czyli magia publikacji
Deploy appki na iOS, czyli magia publikacji
 
TDD w iOS
TDD w iOS TDD w iOS
TDD w iOS
 
Dependency Injection w Androidzie
Dependency Injection w AndroidzieDependency Injection w Androidzie
Dependency Injection w Androidzie
 
Docker
DockerDocker
Docker
 
Testing and symfony2
Testing and symfony2Testing and symfony2
Testing and symfony2
 
You Shall Not Pass - Security in Symfony
You Shall Not Pass - Security in SymfonyYou Shall Not Pass - Security in Symfony
You Shall Not Pass - Security in Symfony
 
Gherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w ITGherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w IT
 
Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng
Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng
Developer mode on, czyli słów kilka o rbenv, rvm i ruby-ng
 
Jak ugryźć Ruby, żeby nie połamać zębów?
Jak ugryźć Ruby, żeby nie połamać zębów?Jak ugryźć Ruby, żeby nie połamać zębów?
Jak ugryźć Ruby, żeby nie połamać zębów?
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w Railsach
 
O wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyce
O wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyceO wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyce
O wyprawie królika przez maszynkę do gniazdka, czyli EventMachine w praktyce
 
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
 

More from The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
The Software House
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
The Software House
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
The Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
The Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
The Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
The Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
The Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
The Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
The Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
The Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
The Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
The Software House
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
The Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
The Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
The Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
The Software House
 

More from The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

Gulp.js - alternatywa do Grunta

  • 2. O mnie • Programista PHP • Pasjonat JavaScriptu • http://wiktortoporek.name/blog
  • 3.
  • 4.
  • 5. VS
  • 6.
  • 7. konfiguracja ponad kodem brak wbudowanych tasków każdy task jest pluginem kod ponad konfiguracją filozofia streamów trochę szybszy? GulpGrunt
  • 8. Jak zacząć? npm i -g gulp npm init npm i gulp --save-dev touch gulpfile.js
  • 9. Hello World var gulp = require('gulp'); gulp.task('hello', function () { console.log('Hello World!'); }); gulp hello
  • 11. copy var gulp = require('gulp'); gulp.task('copy', function () { return gulp.src('node_modules/bootstrap/dist/css/*.min.css') .pipe(gulp.dest('./dist/css')); }); gulp copy
  • 12. Kompilacja SASS var gulp = require('gulp'), sass = require('gulp-sass'); npm i gulp-sass --save-dev gulp sass gulp.task('sass', function () { return gulp.src('./sass/**/*.scss') .pipe(sass()) .pipe(gulp.dest('./css')); });
  • 13. Minifikacja CSS npm i gulp-shorthand gulp-cssnano 
 gulp-uncss --save-dev var gulp = require('gulp'), shorthand = require('gulp-shorthand'), cssnano = require('gulp-cssnano'), uncss = require('gulp-uncss'); gulp minifycss gulp.task('minifycss', function () { return gulp.src('./css/**/*.css') .pipe(shorthand()) .pipe(cssnano()) .pipe(uncss({ html: [ 'index.html', 'subpage/**/*.html', 'http://example.com' ] })) .pipe(gulp.dest('./dist/css')); });
  • 14. Babel var gulp = require('gulp'), babel = require('gulp-babel'); gulp.task('compile', function () { return gulp.src('src/**/*.js') .pipe(babel({ presets: ['es2015'] })) .pipe(gulp.dest('dist/js')); });
  • 15. Sourcemapy var gulp = require('gulp'), sourcemaps = require('gulp-sourcemaps'), babel = require('gulp-babel'), concat = require('gulp-concat'); gulp.task('compile', function () { return gulp.src('src/**/*.js') .pipe(sourcemaps.init()) .pipe(babel({ presets: ['es2015'] })) .pipe(concat('all.js')) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('dist/js')); });
  • 16. Watch
  • 17. Watch var gulp = require('gulp'); gulp.task('watch', function () { gulp.watch('js/**/*.js', ['compile']); gulp.watch('sass/**/*.scss', ['sass']); }); gulp.task('compile', function () { ... }); gulp.task('sass', function () { ... });
  • 18. SSH var gulp = require('gulp'); var GulpSSH = require('gulp-ssh'); var config = { host: 'example.com', port: 22, username: 'www-data', privateKey: fs.readFileSync('/Users/wiktor/.ssh/id_rsa') }; var gulpSSH = new GulpSSH({ ignoreErrors: false, sshConfig: config });
  • 19. SSH gulp.task('deploy', function () { return gulpSSH .shell([ 'cd /var/www/example.com/htdocs', 'git pull', 'npm install', 'npm test' ], {filePath: 'deploy.log'}) .pipe(gulp.dest('logs')) });
  • 21. Gdy nie mamy streamu var gulp = require('gulp'); gulp.task('hello', function () { setTimeout(function() { console.log('Hello'); }, 2000); });
  • 22. Gdy nie mamy streamu var gulp = require('gulp'); gulp.task('hello', function (doneCallback) { setTimeout(function() { console.log('Hello'); doneCallback(null); }, 2000); });
  • 23. Tworzenie zależności var gulp = require('gulp'); gulp.task('hello', function (doneCallback) { setTimeout(function() { console.log('Hello'); doneCallback(null); }, 2000); }); gulp.task('helloworld', ['hello'], function() { console.log('World'); });
  • 25. Zależności działają asynchronicznie var gulp = require('gulp'); gulp.task('hello', function (doneCallback) { setTimeout(function() { console.log('Hello'); doneCallback(null); }, 2000); }); gulp.task('world', function() { console.log('World'); }); gulp.task('helloworld', ['hello', 'world']);
  • 29. Wtyczki gulpowe często są uniwersalne z gulpem łączy je tylko prefix "gulp-"