Podczas tworzenia frontendu aplikacji internetowych często odkrywamy, że nasza baza kodu JavaScript dość szybko się rozrasta i lawinowo przybywa nam zależności. Oczywistym rozwiązaniem wydaje się wtedy dzielenie kodu na mniejsze moduły, ale jak to robić mądrze? Tu z pomocą przychodzi nam webpack. Podczas tej prezentacji dowiemy się, w jaki sposób działa to narzędzie, jak konfiguruje się w nim kompilację assetów oraz jakie dodatkowe możliwości ono w sobie kryje.
19. Loadery
module.exports = {
//...
resolve: {
extensions: ['', '.coffee', '.js']
},
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
20. Loadery
module.exports = {
//...
resolve: {
extensions: ['', '.coffee', '.js']
},
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
38. Krok trzeci
Dodajemy dodatkowe wtyczki (plugins)
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ć.
48. Inne ciekawe wtyczki
- UglifyJsPlugin - używa biblioteki UglifyJS by zmniejszyć rozmiar plików
- DedupePlugin - wyszukuje zduplikowane pliki i je łączy
- 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
49. Inne ciekawe wtyczki
- UglifyJsPlugin - używa biblioteki UglifyJS by zmniejszyć rozmiar plików
- DedupePlugin - wyszukuje zduplikowane pliki i je łączy
- 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
{
"cat": {
"js": "compiled/cat-bundle.js",
"css": "compiled/styles-cat.css"
},
"dog": {
"js": "compiled/dog-bundle.js"
},
"common": {
"js": "compiled/common.js"
}
}
59. Hot module reload
webpack-dev-server --inline --hot
if(module.hot) {
module.hot.accept("./common/uszanowanko" , function() {
var uszanowanko = require('./common/uszanowanko' );
var $ = require('jquery');
$('h2').remove();
uszanowanko();
});
}
60. 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 ;)