ݺߣ

ݺߣShare a Scribd company logo
webpack
czym jest i dlaczego chcesz go używać
Marcin Gajda
The Software House
W skrócie
webpack przetwarza moduły i ich zależności i
tworzy statyczne assety dla naszej aplikacji
Instalacja i uruchamianie
npm init
sudo npm install webpack -g
webpack ./entry_point.js bundle.js
# lub...
webpack --config webpack.config.js
Plik konfiguracyjny webpack.config.js
module.exports = {
context: __dirname+'/assets',
entry: {
user: './user.js',
},
output: {
path: 'compiled',
filename: '[name]-bundle.js',
publicPath: 'compiled/'
},
module: {},
plugins: {},
resolve: {}
};
assets/user.js → compiled/user-bundle.js
var userProfile = require('./user/profile.js');
var userContacts = require('./user/contacts.js');
userProfile.doSomething();
userContacts.doMore();
assets/user.js
Importowanie statyczne
var userProfile = {
doSomething: function(){ return 'hello' }
}
module.exports = userProfile;
assets/user/profile.js
/meet_js/webpack> webpack --display-modules
Importowanie statyczne
/meet_js/webpack> webpack --display-modules
Hash: f7f0a8c9c6d85acfaf68
Version: webpack 1.12.14
Time: 57ms
Asset Size Chunks Chunk Names
user-bundle.js 2.05 kB 0 [emitted] user
[0] ./user.js 122 bytes {0} [built]
[1] ./user/profile.js 66 bytes {0} [built]
[2] ./user/contacts.js 66 bytes {0} [built]
/meet_js/webpack>
Importowanie statyczne
Importowanie dynamiczne
require(['./user/profile.js, './user/contacts.js'],
function(userProfile, userContacts){
userProfile.doSomething();
userContacts.doMore();
}
);
var userProfile = {
doSomething: function(){ return 'hello' }
}
module.exports = userProfile;
assets/user/profile.js
assets/user.js
Importowanie dynamiczne
/meet_js/webpack> webpack --display-modules
Importowanie dynamiczne
/meet_js/webpack> webpack --display-modules
Hash: f7f0a8c9c6d85acfaf68
Version: webpack 1.12.14
Time: 57ms
Asset Size Chunks Chunk Names
user-bundle.js 4.02 kB 0 [emitted] user
1.1-bundle.js 434 kB 1 [emitted]
[0] ./user.js 151 bytes {0} [built]
[1] ./user/profile.js 66 bytes {1} [built]
[2] ./user/contacts.js 66 bytes {1} [built]
/meet_js/webpack>
Wiele “entry pointów”
module.exports = {
//...
entry: {
user: './user',
admin: './admin' //coffeescript!
},
output: {
//...
},
resolve: { extensions: ['', '.js', '.coffee', '.ts'] }
module: {},
plugins: {},
};
webpack.config.js
assets/user.js → compiled/user-bundle.js
assets/admin.coffee → compiled/admin-bundle.js
Loadery
module.exports = {
//...
module: {
loaders: [
{ test: /.coffee$/, loader: 'coffee-loader' }
]
}
};
webpack.config.js
Loadery to małe moduły, które przetwarzają wskazane im
pliki i zwracają je w formie, która może zostać
zapisana lub ulec dalszemu przetwarzaniu przez następne
loadery.
npm install coffee-script coffee-loader --save
adminUsers = require('./admin/users')
adminSettings = require('./user/settings')
adminUsers.doSomething()
adminSettings.doMore()
assets/admin.coffee
adminUsers = ->
doSomething: -> 'hello'
module.exports = adminUsers
assets/admin/users.coffee
Loadery
Loadery
/meet_js/webpack> webpack --display-modules
Loadery
/meet_js/webpack> webpack --display-modules
Hash: 035ccd9c22a0de9b0c61
Version: webpack 1.12.14
Time: 115ms
Asset Size Chunks Chunk Names
user-bundle.js 4.02 kB 0 [emitted] user
1.1-bundle.js 434 bytes 1 [emitted]
admin-bundle.js 2.13 kB 2 [emitted] admin
[0] ./user.js 151 bytes {0} [built]
[0] ./admin.js 122 bytes {2} [built]
[1] ./user/profile.js 66 bytes {1} [built]
[2] ./user/contacts.js 66 bytes {1} [built]
[3] ./admin/users.coffee 80 bytes {2} [built]
[4] ./admin/settings.coffee 80 bytes {2} [built]
Loadery
/meet_js/webpack> webpack --display-modules
Hash: 035ccd9c22a0de9b0c61
Version: webpack 1.12.14
Time: 115ms
Asset Size Chunks Chunk Names
user-bundle.js 4.02 kB 0 [emitted] user
1.1-bundle.js 434 bytes 1 [emitted]
admin-bundle.js 2.13 kB 2 [emitted] admin
[0] ./user.js 151 bytes {0} [built]
[0] ./admin.js 122 bytes {2} [built]
[1] ./user/profile.js 66 bytes {1} [built]
[2] ./user/contacts.js 66 bytes {1} [built]
[3] ./admin/users.coffee 80 bytes {2} [built]
[4] ./admin/settings.coffee 80 bytes {2} [built]
Importowanie grafik i innych assetów
var defaultAvatar = require('../images/avatar.png');
//...
var avatar = user.avatar || defaultAvatar;
module.exports = {
//...
module: {
loaders: [
{ test: /.coffee$/, loader: "coffee-loader" },
{ test: /.(png|jpg|gif|bmp)/, loader: "file" }
]
}
};
require('../styles/theme');
//...
assets/user.js
Importowanie CSS
module.exports = {
//...
resolve: {
extensions: ['', '.coffee', '.js', '.scss']
},
module: {
loaders: [
//...
{ test: /.scss$/, loaders: ["style", "css", "sass"] }
]
}
};
webpack.config.js
Importowanie CSS
Importowanie CSS
var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
//...
plugins: [
new ExtractTextPlugin("styles-[name].css", {allChunks:true})
],
module: {
loaders: [
//...
{ test: /.scss$/, loader: ExtractTextPlugin.extract(["css", "sass"], {publicPath: ''}) }
]
}
};
webpack.config.js
Wtyczki to moduły, które pozwalają na wykonanie
dodatkowych czynności podczas działania skryptu
webpacka. Mogą dodawać pliki, usuwać je lub
ponownie przetwarzać.
Ekstrakcja CSS
Wspólne fragmenty kodu
var webpack = require('webpack');
module.exports = {
//...
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
filename: 'common.js',
chunks: ['user', 'admin']
}),
//...
]
};
webpack.config.js
Inne przydatne wtyczki
- UglifyJsPlugin - używa biblioteki UglifyJS by zmniejszyć rozmiar plików
- DefinePlugin - dorzuca stałe do naszego JavaScript
- ProvidePlugin - automatycznie importuje moduły na podstawie zmiennych
- CleanupPlugin - czyści folder na kompilowane pliki przed emisją nowych
- AssetsPlugin - zrzuca do pliku JSON informacje o wyemitowanych plikach,
które należy dołączyć do dokumentu HTML
Inne przydatne wtyczki
- UglifyJsPlugin - używa biblioteki UglifyJS by zmniejszyć rozmiar plików
- DefinePlugin - dorzuca stałe do naszego JavaScript
- ProvidePlugin - automatycznie importuje moduły na podstawie zmiennych
- CleanupPlugin - czyści folder na kompilowane pliki przed emisją nowych
- AssetsPlugin - zrzuca do pliku JSON informacje o wyemitowanych plikach,
które należy dołączyć do dokumentu HTML
{
"user": {
"js": "compiled/user-bundle.js",
"css": "compiled/styles-user.css"
},
"admin": {
"js": "compiled/admin-bundle.js"
},
"common": {
"js": "compiled/common.js"
}
}
Sourcemapy
module.exports = {
//...
devtool: 'source-map'
};
Sourcemapy
module.exports = {
//...
devtool: 'source-map'
};
Serwer developerski
npm install webpack-dev-server -g
webpack-dev-server --content-base .
// http://localhost:8080/
// Autoreload przez iframe
// http://localhost:8080/webpack-dev-server/
webpack-dev-server
// Standardowy autoreload
// http://localhost:8080/
webpack-dev-server --inline
Hot module reload
webpack-dev-server --inline --hot
if(module.hot) {
module.hot.accept("./some/module", function() {
var lib = require('./some/module);
lib.removeFromWebsite();
lib.addToWebsite();
});
}
Podsumowanie
Dlaczego chcesz używać webpacka?
- Potrzebujesz skalowalności w projekcie
- Masz duży projekt z dużą ilością wspólnych zależności
- Chcesz łatwo skonfigurować transpilację
- Lubisz porządek w zależnościach
- Nie lubisz zmiennych globalnych
A dlaczego nie chcesz?
- Masz istniejący projekt, który będzie trzeba migrować
- Bo naprawdę potrzebujesz task-runnera, a nie bundlera ;)
Pytania?
@marcingajda91

More Related Content

What's hot (20)

Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
Rafał Filipek
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobamiElasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
Enterprise Search Warsaw Meetup
Devbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracyDevbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracy
Marek Bleschke
Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!
The Software House
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
Mariusz Nowak
Potęga pliku .htaccess
Potęga pliku .htaccessPotęga pliku .htaccess
Potęga pliku .htaccess
Wojciech Klocek
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
Sebastian Nowak
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaAutomatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Women in Technology Poland
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
Kamil Grabowski
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
Marcin Kurzyna
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
Kamil Grabowski
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
Wojciech Klocek
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
Piotr Pelczar
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
Sages
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
Laravel Poland MeetUp
Poznaj wp-config.php "Ukryte" możliwości.
Poznaj wp-config.php  "Ukryte" możliwości.Poznaj wp-config.php  "Ukryte" możliwości.
Poznaj wp-config.php "Ukryte" możliwości.
Marcin Jóźwiak
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
Tomasz Dziuda
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobamiElasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
Enterprise Search Warsaw Meetup
Devbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracyDevbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracy
Marek Bleschke
Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!
The Software House
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaAutomatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Women in Technology Poland
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
Kamil Grabowski
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
Kamil Grabowski
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
Wojciech Klocek
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
Piotr Pelczar
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
Sages
Poznaj wp-config.php "Ukryte" możliwości.
Poznaj wp-config.php  "Ukryte" możliwości.Poznaj wp-config.php  "Ukryte" możliwości.
Poznaj wp-config.php "Ukryte" możliwości.
Marcin Jóźwiak
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
Tomasz Dziuda

Viewers also liked (20)

Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?
Marcin Gajda
Flexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekFlexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełek
Marcin Gajda
Angular Restmod
Angular RestmodAngular Restmod
Angular Restmod
Marcin Gajda
ES2015 / ES6 Podstawy nowoczesnego JavaScriptu
ES2015 / ES6 Podstawy nowoczesnego JavaScriptuES2015 / ES6 Podstawy nowoczesnego JavaScriptu
ES2015 / ES6 Podstawy nowoczesnego JavaScriptu
Wojciech Dzikowski
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce
3camp
React.js - Wprowadzenie
React.js - WprowadzenieReact.js - Wprowadzenie
React.js - Wprowadzenie
Marcin Mieszek
Webpack integration
Webpack integrationWebpack integration
Webpack integration
Illia Zub
Hey webpack
Hey webpackHey webpack
Hey webpack
Andrew Makarow
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
Yaroslav Serhieiev
Webpack DevTalk
Webpack DevTalkWebpack DevTalk
Webpack DevTalk
Alessandro Bellini
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
Vladimir Malyk
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
Vladimir Malyk
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
lgordey
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JS
Emil Öberg
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack Introduction
Anjali Chawla
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
Омские ИТ-субботники
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
Webpack
WebpackWebpack
Webpack
Raymond McDermott
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
Chen-Tien Tsai
Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?
Marcin Gajda
Flexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekFlexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełek
Marcin Gajda
ES2015 / ES6 Podstawy nowoczesnego JavaScriptu
ES2015 / ES6 Podstawy nowoczesnego JavaScriptuES2015 / ES6 Podstawy nowoczesnego JavaScriptu
ES2015 / ES6 Podstawy nowoczesnego JavaScriptu
Wojciech Dzikowski
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce
3camp
Webpack integration
Webpack integrationWebpack integration
Webpack integration
Illia Zub
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
Yaroslav Serhieiev
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
Vladimir Malyk
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
Vladimir Malyk
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
lgordey
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JS
Emil Öberg
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
Омские ИТ-субботники
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
Chen-Tien Tsai

Similar to Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka (20)

AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
Jacek Okrojek
Magento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUAMagento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocław
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NET
Bartlomiej Zass
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
Lukas Lesniewski
Środowisko testowe pod REST-a
Środowisko testowe pod REST-aŚrodowisko testowe pod REST-a
Środowisko testowe pod REST-a
Future Processing
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
Laravel Poland MeetUp
Struktura i własności systemu zarządzania treścią Drupal
Struktura i własności systemu zarządzania treścią DrupalStruktura i własności systemu zarządzania treścią Drupal
Struktura i własności systemu zarządzania treścią Drupal
Grzegorz Bartman
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
Sages
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Dominik Szopa
Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)
Timur Kamanin
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
The Software House
AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawy
Apptension
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
Droptica
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
Kamil Grabowski
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
3camp
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
3camp
GCP & Wordpress
GCP & WordpressGCP & Wordpress
GCP & Wordpress
Fly on the cloud
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PROIDEA
react-pl.pdf
react-pl.pdfreact-pl.pdf
react-pl.pdf
ssuser65180a
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
Tomasz Dziuda
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
Jacek Okrojek
Magento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUAMagento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocław 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocław
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NET
Bartlomiej Zass
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
Laravel Poland MeetUp
Struktura i własności systemu zarządzania treścią Drupal
Struktura i własności systemu zarządzania treścią DrupalStruktura i własności systemu zarządzania treścią Drupal
Struktura i własności systemu zarządzania treścią Drupal
Grzegorz Bartman
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
Sages
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Dominik Szopa
Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)
Timur Kamanin
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
The Software House
AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawy
Apptension
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
Droptica
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
3camp
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
3camp
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PROIDEA
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
Tomasz Dziuda

Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka

  • 1. webpack czym jest i dlaczego chcesz go używać Marcin Gajda The Software House
  • 2. W skrócie webpack przetwarza moduły i ich zależności i tworzy statyczne assety dla naszej aplikacji
  • 3. Instalacja i uruchamianie npm init sudo npm install webpack -g webpack ./entry_point.js bundle.js # lub... webpack --config webpack.config.js
  • 4. Plik konfiguracyjny webpack.config.js module.exports = { context: __dirname+'/assets', entry: { user: './user.js', }, output: { path: 'compiled', filename: '[name]-bundle.js', publicPath: 'compiled/' }, module: {}, plugins: {}, resolve: {} }; assets/user.js → compiled/user-bundle.js
  • 5. var userProfile = require('./user/profile.js'); var userContacts = require('./user/contacts.js'); userProfile.doSomething(); userContacts.doMore(); assets/user.js Importowanie statyczne var userProfile = { doSomething: function(){ return 'hello' } } module.exports = userProfile; assets/user/profile.js
  • 7. /meet_js/webpack> webpack --display-modules Hash: f7f0a8c9c6d85acfaf68 Version: webpack 1.12.14 Time: 57ms Asset Size Chunks Chunk Names user-bundle.js 2.05 kB 0 [emitted] user [0] ./user.js 122 bytes {0} [built] [1] ./user/profile.js 66 bytes {0} [built] [2] ./user/contacts.js 66 bytes {0} [built] /meet_js/webpack> Importowanie statyczne
  • 8. Importowanie dynamiczne require(['./user/profile.js, './user/contacts.js'], function(userProfile, userContacts){ userProfile.doSomething(); userContacts.doMore(); } ); var userProfile = { doSomething: function(){ return 'hello' } } module.exports = userProfile; assets/user/profile.js assets/user.js
  • 10. Importowanie dynamiczne /meet_js/webpack> webpack --display-modules Hash: f7f0a8c9c6d85acfaf68 Version: webpack 1.12.14 Time: 57ms Asset Size Chunks Chunk Names user-bundle.js 4.02 kB 0 [emitted] user 1.1-bundle.js 434 kB 1 [emitted] [0] ./user.js 151 bytes {0} [built] [1] ./user/profile.js 66 bytes {1} [built] [2] ./user/contacts.js 66 bytes {1} [built] /meet_js/webpack>
  • 11. Wiele “entry pointów” module.exports = { //... entry: { user: './user', admin: './admin' //coffeescript! }, output: { //... }, resolve: { extensions: ['', '.js', '.coffee', '.ts'] } module: {}, plugins: {}, }; webpack.config.js assets/user.js → compiled/user-bundle.js assets/admin.coffee → compiled/admin-bundle.js
  • 12. Loadery module.exports = { //... module: { loaders: [ { test: /.coffee$/, loader: 'coffee-loader' } ] } }; webpack.config.js Loadery to małe moduły, które przetwarzają wskazane im pliki i zwracają je w formie, która może zostać zapisana lub ulec dalszemu przetwarzaniu przez następne loadery. npm install coffee-script coffee-loader --save
  • 13. adminUsers = require('./admin/users') adminSettings = require('./user/settings') adminUsers.doSomething() adminSettings.doMore() assets/admin.coffee adminUsers = -> doSomething: -> 'hello' module.exports = adminUsers assets/admin/users.coffee Loadery
  • 15. Loadery /meet_js/webpack> webpack --display-modules Hash: 035ccd9c22a0de9b0c61 Version: webpack 1.12.14 Time: 115ms Asset Size Chunks Chunk Names user-bundle.js 4.02 kB 0 [emitted] user 1.1-bundle.js 434 bytes 1 [emitted] admin-bundle.js 2.13 kB 2 [emitted] admin [0] ./user.js 151 bytes {0} [built] [0] ./admin.js 122 bytes {2} [built] [1] ./user/profile.js 66 bytes {1} [built] [2] ./user/contacts.js 66 bytes {1} [built] [3] ./admin/users.coffee 80 bytes {2} [built] [4] ./admin/settings.coffee 80 bytes {2} [built]
  • 16. Loadery /meet_js/webpack> webpack --display-modules Hash: 035ccd9c22a0de9b0c61 Version: webpack 1.12.14 Time: 115ms Asset Size Chunks Chunk Names user-bundle.js 4.02 kB 0 [emitted] user 1.1-bundle.js 434 bytes 1 [emitted] admin-bundle.js 2.13 kB 2 [emitted] admin [0] ./user.js 151 bytes {0} [built] [0] ./admin.js 122 bytes {2} [built] [1] ./user/profile.js 66 bytes {1} [built] [2] ./user/contacts.js 66 bytes {1} [built] [3] ./admin/users.coffee 80 bytes {2} [built] [4] ./admin/settings.coffee 80 bytes {2} [built]
  • 17. Importowanie grafik i innych assetów var defaultAvatar = require('../images/avatar.png'); //... var avatar = user.avatar || defaultAvatar; module.exports = { //... module: { loaders: [ { test: /.coffee$/, loader: "coffee-loader" }, { test: /.(png|jpg|gif|bmp)/, loader: "file" } ] } };
  • 18. require('../styles/theme'); //... assets/user.js Importowanie CSS module.exports = { //... resolve: { extensions: ['', '.coffee', '.js', '.scss'] }, module: { loaders: [ //... { test: /.scss$/, loaders: ["style", "css", "sass"] } ] } }; webpack.config.js
  • 21. var ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { //... plugins: [ new ExtractTextPlugin("styles-[name].css", {allChunks:true}) ], module: { loaders: [ //... { test: /.scss$/, loader: ExtractTextPlugin.extract(["css", "sass"], {publicPath: ''}) } ] } }; webpack.config.js Wtyczki to moduły, które pozwalają na wykonanie dodatkowych czynności podczas działania skryptu webpacka. Mogą dodawać pliki, usuwać je lub ponownie przetwarzać. Ekstrakcja CSS
  • 22. Wspólne fragmenty kodu var webpack = require('webpack'); module.exports = { //... plugins: [ new webpack.optimize.CommonsChunkPlugin({ name: 'common', filename: 'common.js', chunks: ['user', 'admin'] }), //... ] }; webpack.config.js
  • 23. Inne przydatne wtyczki - UglifyJsPlugin - używa biblioteki UglifyJS by zmniejszyć rozmiar plików - DefinePlugin - dorzuca stałe do naszego JavaScript - ProvidePlugin - automatycznie importuje moduły na podstawie zmiennych - CleanupPlugin - czyści folder na kompilowane pliki przed emisją nowych - AssetsPlugin - zrzuca do pliku JSON informacje o wyemitowanych plikach, które należy dołączyć do dokumentu HTML
  • 24. Inne przydatne wtyczki - UglifyJsPlugin - używa biblioteki UglifyJS by zmniejszyć rozmiar plików - DefinePlugin - dorzuca stałe do naszego JavaScript - ProvidePlugin - automatycznie importuje moduły na podstawie zmiennych - CleanupPlugin - czyści folder na kompilowane pliki przed emisją nowych - AssetsPlugin - zrzuca do pliku JSON informacje o wyemitowanych plikach, które należy dołączyć do dokumentu HTML { "user": { "js": "compiled/user-bundle.js", "css": "compiled/styles-user.css" }, "admin": { "js": "compiled/admin-bundle.js" }, "common": { "js": "compiled/common.js" } }
  • 27. Serwer developerski npm install webpack-dev-server -g webpack-dev-server --content-base . // http://localhost:8080/ // Autoreload przez iframe // http://localhost:8080/webpack-dev-server/ webpack-dev-server // Standardowy autoreload // http://localhost:8080/ webpack-dev-server --inline
  • 28. Hot module reload webpack-dev-server --inline --hot if(module.hot) { module.hot.accept("./some/module", function() { var lib = require('./some/module); lib.removeFromWebsite(); lib.addToWebsite(); }); }
  • 29. Podsumowanie Dlaczego chcesz używać webpacka? - Potrzebujesz skalowalności w projekcie - Masz duży projekt z dużą ilością wspólnych zależności - Chcesz łatwo skonfigurować transpilację - Lubisz porządek w zależnościach - Nie lubisz zmiennych globalnych A dlaczego nie chcesz? - Masz istniejący projekt, który będzie trzeba migrować - Bo naprawdę potrzebujesz task-runnera, a nie bundlera ;)