by: Goran Gajić
Webpack
- Webpack Alat koji pakuje module u male staticne parcice(bundles) koji mogu da se ucitavaju samo kad su potrebni
- nesto kao browserify
- moze da zameni gulp ili grunt
- podrzava module koji su pisani u AMD, CommonJS...
- ne zahteva mnogo konfiguracije kao ostali module loaderi
- odlican za velike projekte
- lako integrise 3rd party biblioteke i module
- podrzska za source maps
Kako radi?
Webpack nadogradjuje standardnu require() funkciju
putem loadera
var angular = require('angular');
angular.controller('foo', function() {
});
var Game = require('es6!./Game.js').default;
mozemo da uvedemo podrsku za es6 putem es6-loadera
Loaders
nadogradjuju standardne mogucnosti wabpack-a tako sto predprocesuju fajlove i vracaju staticne module
- CSS preprocessors
- ES6 Module Transpilers
- Pretvara assets u base64
Nesto kao browserify transforms
var _ = require('lodash');
// koristi url loader
require('url!./image.png');
// CSS se loaduje kao text i ubacuje u <head/>
// Vise loadera moze da se spoji
require('style!css!./styles.css');
// Ako js fajl e podrzava modularni stistem i dalje mozemo da ga koristimo
// zahtevamo ga i dodleimo mu lokalnu promenjivu
require('imports?foo=lib!lib.js');
// onda nam je foo lokalna promenjiva
foo.say();
Vise od JavaScript-a
HTML/templates
require('style!css!less!./style.less')
LESS
var template = require("./template.hbs");
// => generise template handlebars funkciju
require("url?limit=10000!./image.png");
// prebacuje image.png u public dir
// vraca url ili DataUrl ako je "image.png" manja od 10kb
Images
Fajlovi / Fontovi
var fontUrl = require("file!./font.svg");
// => prebacice fajl u public dir
// => vratice putanju
// webpack.config.js
{
module: {
loaders: [
{ test: /\.jade$/, loader: "jade" },
// => "jade" loader ce biti koriscen za ".jade" fajlove
{ test: /\.css$/, loader: "style!css" },
// => "style" i "css" loader ce biti koriscen za ".css" fajlove
{ test: /\.es6$/, loader: "es6" },
// => "es6" loader ce biti koriscen za ".es6" fajlove
]
}
}
ako stavimo u konfiguraciju ime loadera i fajl podrazumevani tip podatka nije nam potrebno da ga kucamo
Konfigurisanje loadera
// app.js
var Game = require('./Game'); // loadovace ./Game.es6 kao es6 modul
async loading
CommonJS je sihron ali webpack pruza mogucnosti ta asohrino definisemo zavisnosti. Naprimer to je korisno kad imamo naprimer klientski router i zelimo na svim stranicama ali zelimo da imamo i delove aplikacije koje zelimo da preuzmemo samo kad su nam potrebne.
// router.js
var page = require('page');
var app = require('app');
page('/blog', function() {
app.showLoading();
require('bundle!./views/blog')(function(Blog) {
app.hideLoading();
app.render(Blog);
});
});
// views/blog.js
require('./less/blog.less');
var template = require('./templates/blog');
var request = require('superagent');
module.exports = Blog;
function Blog() {
this.el = options.el;
this.render();
};
Blog.prototype.render = function() {
var self = this;
request.get('/api/v1/blog', function(res) {
var html = template(res.body);
self.el.innerHTML = html;
});
};
Alati
- Postoje loaderi za sve
- Watch mode koji radi fantasticno i brzo
- minifikacija dolazi out of the box `webpack -p`
- postoji webpack-dev-server koji radi odlicno za testiranje SPA
- middleware za node.js koji moze da se koristi tokom developmenta
- postoje loaderi koji optimizuju slike
- dinamicno updejtovanje koda
Gulp i Grunt nisu potrebni posto wepback podrzava skoro sve sto je potrebno za modernu javascrit aplikaciju
To je to
Webpack je strava
vise na ovim linkovima
by: Goran Gajić
webpack
By feroc1ty
webpack
- 1,550