SlideShare a Scribd company logo
Automatizarea asamblării
frontend-lui.
Lumea modernă a dezvoltării web ne
deschide atât oportunități incredibile, cât și
probleme.
Pe scară pot fi împărțite în două:
• Problemele globale
• Problemele locale
Probleme globale
 Decuplarea deciziilor. HTML5 și JavaScript sunt soluții
revoluționare care sunt create aproape în fiecare zi. Fiecare
are propriile particularități, avantaje și dezavantaje.
Toate acestea sunt concepute pentru a rezolva o mică, de fapt, o serie
de sarcini:
• jQuery, Knockout, Angular, Marionette, React - dacă dai
peste detalii, toate acestea sunt create pentru a rezolva
aceleași probleme.
• Underscore, lodash, Lazy, ES6 - în multe feluri, pentru a
lucra cu date.
• MVC, MVVM, Flux - chiar și modele arhitecturale sunt create
pentru a rezolva o sarcină.
Varietate de versiuni de mărire mărește
amploarea problemei:
• Un plugin necesită jQuery 1.8, jQuery 2.1.
• Angular 1.3 și Angular 2+ sunt aproape
complet diferite.
• Bootstrap 2.3 și Bootstrap 3.1 -
componentele create pentru o versiune nu
vor fi lăsate afară din cutie pentru alta.
Formate pentru preprocesare (aici, de
asemenea, containere), de exemplu:
• LESS, SCSS, SASS, Stylus — pentru stiluri.
• Handlebars, jade, EJS — pentru șabloane.
• JSON, JSON5, PJSON, XML — pentru date.
• CoffeeScript, JSX, ES6 — scripturi, etc
Probleme locale
 Complexitatea creșterii proiectului :
• Funcțional - creați un prototip, adăugați o
secțiune, faceți o formă, legați secțiunile
între ele, etc.
• Tehnologic - accesați Bootstrap, conectați
Leaflet, implementați React, etc.
Gestionarea dependenței.
Atunci când în proiect apar cel puțin 3
scripturi, începe să jonglezi - trebuie să
gândești întotdeauna:
• Sunt încărcate bibliotecile?
• Și stilurile necesare?
• Cum rămâne cu șabloanele?
Versionare
Solutii
Soluția cea mai optimă este ruperea codului
în module izolate. Din punct de vedere
istoric, au existat două abordări: AMD și
CommonJS.
Soluții populare
• AMD (Asynchronous Module Definition)
Se reduce la definiția modulului prin define ()
și apel prin require ()
• CommonJS
Nativ implementat pe server-side JavaScript
în Node.js / Rhino. Reducerea la definirea
unui modul printr-o variabilă globală și un
apel prin necesită ()
• Grunt
• Gulp
• Browserify
• SystemJS
• Brunch
• Rollup
• Flipbox
Webpack
Webpack — este un constructor de module
pentru aplicațiile JavaScript moderne.
Când webpack-ul procesează aplicația dvs.,
acesta creează în mod recursiv un graf de
dependență, care include toate modulele
solicitate de aplicație, apoi pachete toate
aceste module într-un număr specificat de
fișiere - adesea doar unul - pentru
încărcarea browserului.
La nivel global, există două strategii pentru
utilizarea webpack-ului
 prin consola (potrivită pentru proiecte mici);
 prin script-ul ca un modul Node.js.
În ambele cazuri, avem nevoie Node.js si npm.
Utilizarea consolei
Pentru experiment, creați directorul src și
dispuneți de un script index.js :
console.log('Hello Habrahabr!');
Dosarul de assets va conține fișierele noastre de
ieșire (scripturi, stiluri, imagini folosite de ele).
Acestea sunt aceleași fișiere pe care le putem
pune pe serverul nostru web, pe CDN etc.
Utilizarea consolei
Pentru a face acest lucru, trebuie să
instalăm webpack la nivel global:
npm install webpack –g
Adunarea este efectuată de comandă:
webpack src/index.js assets/bundle.js
Использование в качестве модуля
Это наиболее подходящая стратегия для
средних и крупных проектов. В директории
проекта создаём package.json. Это можно
сделать командой:
npm init
Добавляем в проект модуль webpack:
npm install webpack --save-dev
Pentru a construi proiectul, vom crea
scriptul Node.js. De exemplu, build.js:
În ambele cazuri, vom obține directorul de
active și bundle.js în acesta este fișierul
nostru colectat, care conține index.js în sine
și toate dependențele pe care le conectează.
Este suficient să conectați numai acest fișier:
Rulați ansamblul : node build
Webpack este incredibil de flexibil în
configurație, cu toate acestea, pentru
început, este suficient să înțelegem patru
concepte de bază:
• entry (punctul de intrare),
• output (iesire),
• loaders (încarcatoare),
• plugins (pluginuri).
Punct de intrare(Entry)
Webpack creează un grafic al tuturor dependențelor aplicației.
Primul element al graficului este cunoscut ca punct de intrare.
Punctul de intrare specifică webpack-ul, de unde să începeți
să construiți graficul de dependență pentru a afla ce să
conectați. Puteți specifica un punct de intrare ca cale către
fișierul care lansează aplicația.
Într-un WebPack, punctele de intrare sunt declarate în proprietatea de
intrare a obiectului de configurare.
entry: {
"site": "./site",
"admin": "./admin“
}
Iesiri (Output)
• După ce compilați și
îmbinați toate
ansamblurile dvs.,
trebuie să spuneți în
continuare webpack
unde va fi amplasat
ansamblul.
Proprietatea de ieșire
indică WebPack
modul de procesare
a fișierelor de
asamblare rezultate.
output: { path:
require("path").resolve("./public/_/"),
publicPath: "/assets/", filename: "[name].js",
chunkFilename: "[id].chunk.js"}
• Încărcători (Loaders)
Scopul este să vă asigurați că toate
ansamblurile din proiectul dvs. sunt
convertite prin intermediul pachetului web
(deși acest lucru nu înseamnă că acestea
ar trebui să fie combinate). Webpack
tratează fiecare fișier (.css, .html, .scss,
.jpg, etc.) ca modul. Cu toate acestea,
webpack-ul însuși "înțelege" numai
JavaScript.
Încărcătoare au
nevoie de webpack
pentru două lucruri:
• Determinați ce fișier
este procesat de
către care încărcător
(proprietatea de test)
• Conversia acestor
fișiere astfel încât
acestea să poată fi
adăugate la graficul
de dependență (și, în
cele din urmă, la
asamblare) (folosiți
proprietatea)
• conversia datelor dintr-un format în altul;
• pot adăuga alte module pe ambalaj;
• ca regulă, să facă o transformare;
• lucrați cu un singur modul.
• Pluginuri (Plugins)
În timp ce încărcătorii efectuează numai
transformări bazate pe fișiere, plug-in-urile
sunt mai des folosite pentru a efectua
acțiuni și conversii definite de utilizator la
timpul de compilare sau părți ale
ansamblului dvs. (și multe altele!).
Webpack are un sistem foarte puternic și
flexibil de conectare.
• au acces la toate modulele (înainte și după
transformare);
• pot adăuga propriile module la pachet (de
exemplu, "runtime");
• să aibă acces la toate resursele create după
ambalare;
• sunt folosite pentru a schimba configurația
ansamblului, a optimiza, a adăuga unele
obiecte la module, resurse de actualizare
fierbinte.
• webpack.optimize.UglifyJsPlugin —
minimizarea codului folosind UglifyJS
Toate minifactoarele moderne funcționează
după cum urmează:
• Dezasamblează codul JavaScript în
arborele de sintaxă. (la fel, procedează
orice interpretator JavaScript )
• Parcurg arborele, îl analizează și-l
optimizează
• Înscriu într-un arbore sintactic codul
căpătat.
• webpack.optimize.DedupePlugin —
eliminarea modulelor duplicate.
Dacă, de exemplu, folosiți bibliotecile
Node.js terțe părți, atunci cel mai probabil,
modulele pe care le utilizează pot fi
duplicate.
Acest plugin găsește module duplicate și le
șterge. Acest lucru nu afectează
stabilitatea codului, dar poate reduce
semnificativ dimensiunea fișierului
colectat.
• ExtractTextPlugin vă permite să extrageți
conținutul tuturor fișierelor CSS conectate
într-un singur fișier CSS separat. Acest
lucru vă permite să accelerați
descărcarea, deoarece CSS este încărcat
în mod asincron (paralel cu fișierele JS).
Se recomandă utilizarea cu un număr
mare de stiluri.
• Webpack-dev-server lucrează “în memorie”
(“server running in-memory”) — creează
fișiere compilate în directorul de proiect.
• “Hot Module Replacement (HMR)” — vă
permite să actualizați module individuale
ale paginii, fără să o restartați complet.
Puterea completă poate fi experimentată
atunci când este utilizată cu React.
Server local pentru verificarea
funcționării Webpack
server local pentru a
vedea rezultatul
activității Webpack în
browser. Acest plug-
in se numește "nod-
static" și nu are nimic
de a face direct cu
Webpack. Este doar
un instrument util
pentru anumite
cazuri.
{
"scripts": {
"start": "webpack",
"serv": "static build"
},
"devDependencies": {
"html-webpack-plugin": "^2.28.0",
"node-static": "^0.7.9",
"webpack": "^2.2.1"
}
}
Webpack —watch
Webpack poate
monitoriza modificările
fișierelor și poate
reconstrui automat
pachetul (un fișier
javascript care se
conectează ca punct
de intrare). Pentru a
face acest lucru,
adăugați cuvântul
cheie "-watch" la
scriptul npm.
package.json
"scripts": {
"start": "webpack --watch",
"serv": "static build"
},
Performanțe generale Webpack
Lista de verificare a dezvoltării
• webpack-dev-server (WDS) - Automatic
Browser Refresh
• Hot Module Replacement (HMR) – Appendix
covers the topic in detail
• Linting is a technique that allows you to detect
code related issue through static analysis.
Styling
• ExtractTextPlugin - Separating CSS chapter
covers how to achieve this
• Autoprefixing - Autoprefixing chapter shows how
to do this
• The Eliminating Unused CSS - chapter explains the
basic idea of this technique
Assets
• Loading Images
• Loading Fonts
• Minifying
Caching
• Splitting Bundles - Adding Hashes to Filenames
• Code Splitting - Dynamic Loading
• Adding Hashes to Filenames - Separating
Manifest
Optimization
• Use ES6 module definition to leverage tree
shaking
• Environment Variables
• Environment Variables
• Web Workers
Output
• Tidying Up
• Authoring Packages
Sarcina
1. De instalat https://github.com/vuejs-
templates/webpack
2. Descrieți structura fisierului de configurare
WebPack
3. Ce plugin-uri Webpack sunt instalate?
4. Ce scripturi npm sunt descrise ?
5. Cum este realizată sincronizarea cu browser-lui în
timpul dezvoltării?
6...
• https://loftblog.ru/material/1-vvedenie-v-
webpack-2/
• http://leanpub.com/survivejs-webpack

More Related Content

Similar to Webpack

Node.js: aspecte esențiale
Node.js: aspecte esențialeNode.js: aspecte esențiale
Node.js: aspecte esențialeSabin Buraga
 
Prezentare Distinct Nbb Cluster V1
Prezentare Distinct Nbb Cluster V1Prezentare Distinct Nbb Cluster V1
Prezentare Distinct Nbb Cluster V1Adrian Dragomir
 
Prezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian NeaguPrezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian Neaguvasile33
 
Drupal Basics
Drupal BasicsDrupal Basics
Drupal BasicsAG Prime
 
Biblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptxBiblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptxCostea112
 
Graduation projects in Crispico
Graduation projects in CrispicoGraduation projects in Crispico
Graduation projects in Crispicostagiipebune
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Sabin Buraga
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSabin Buraga
 
Google Web Toolkit - tutorial
Google Web Toolkit - tutorialGoogle Web Toolkit - tutorial
Google Web Toolkit - tutorialanisoarasava
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...Sabin Buraga
 
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...constantadevelopers
 
Prezentare generala a platformei Android
Prezentare generala a platformei AndroidPrezentare generala a platformei Android
Prezentare generala a platformei Androidmsg4alex
 
Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Agora Group
 
Innovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud ComputingInnovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud ComputingMihai Dan Nadas
 
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptCLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptSabin Buraga
 

Similar to Webpack (20)

Node.js: aspecte esențiale
Node.js: aspecte esențialeNode.js: aspecte esențiale
Node.js: aspecte esențiale
 
Prezentare Distinct Nbb Cluster V1
Prezentare Distinct Nbb Cluster V1Prezentare Distinct Nbb Cluster V1
Prezentare Distinct Nbb Cluster V1
 
Prezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian NeaguPrezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian Neagu
 
Drupal Basics
Drupal BasicsDrupal Basics
Drupal Basics
 
Curs java
Curs javaCurs java
Curs java
 
Biblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptxBiblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptx
 
Graduation projects in Crispico
Graduation projects in CrispicoGraduation projects in Crispico
Graduation projects in Crispico
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
Google Web Toolkit - tutorial
Google Web Toolkit - tutorialGoogle Web Toolkit - tutorial
Google Web Toolkit - tutorial
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
 
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
 
Webappdev
WebappdevWebappdev
Webappdev
 
Axiologic quark
Axiologic quarkAxiologic quark
Axiologic quark
 
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, ...
 
Prezentare generala a platformei Android
Prezentare generala a platformei AndroidPrezentare generala a platformei Android
Prezentare generala a platformei Android
 
Irina Cureraru
Irina CureraruIrina Cureraru
Irina Cureraru
 
Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010
 
Innovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud ComputingInnovation in Publishing - HTML5 and Cloud Computing
Innovation in Publishing - HTML5 and Cloud Computing
 
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptCLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
 

More from Dmitrii Stoian

Controlul versiunilor
Controlul versiunilor Controlul versiunilor
Controlul versiunilor Dmitrii Stoian
 
Crearea prototipurilor
Crearea prototipurilorCrearea prototipurilor
Crearea prototipurilorDmitrii Stoian
 
Bazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselorBazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselorDmitrii Stoian
 
009. compresia imaginilor digitale
009. compresia imaginilor digitale009. compresia imaginilor digitale
009. compresia imaginilor digitaleDmitrii Stoian
 
008. iimagini ca entitate mutimedia
008. iimagini ca entitate mutimedia008. iimagini ca entitate mutimedia
008. iimagini ca entitate mutimediaDmitrii Stoian
 
007. culoare in entitati multimedia
007. culoare in entitati multimedia007. culoare in entitati multimedia
007. culoare in entitati multimediaDmitrii Stoian
 
006. textul – entitate de studiu multimedia
006. textul – entitate de studiu multimedia006. textul – entitate de studiu multimedia
006. textul – entitate de studiu multimediaDmitrii Stoian
 
004. prelucrarea evenimentelor js
004. prelucrarea evenimentelor js004. prelucrarea evenimentelor js
004. prelucrarea evenimentelor jsDmitrii Stoian
 
003. manipularea cu dom
003. manipularea cu dom003. manipularea cu dom
003. manipularea cu domDmitrii Stoian
 
002. Introducere in type script
002. Introducere in type script002. Introducere in type script
002. Introducere in type scriptDmitrii Stoian
 
001.Introducere in tehnologii mutimedia
001.Introducere in tehnologii mutimedia001.Introducere in tehnologii mutimedia
001.Introducere in tehnologii mutimediaDmitrii Stoian
 

More from Dmitrii Stoian (18)

Docker
DockerDocker
Docker
 
Ide
IdeIde
Ide
 
Web servers
Web servers Web servers
Web servers
 
Svg
Svg Svg
Svg
 
Devtools
DevtoolsDevtools
Devtools
 
Controlul versiunilor
Controlul versiunilor Controlul versiunilor
Controlul versiunilor
 
Crearea prototipurilor
Crearea prototipurilorCrearea prototipurilor
Crearea prototipurilor
 
Bazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselorBazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselor
 
010. animatii
010. animatii010. animatii
010. animatii
 
009. compresia imaginilor digitale
009. compresia imaginilor digitale009. compresia imaginilor digitale
009. compresia imaginilor digitale
 
008. iimagini ca entitate mutimedia
008. iimagini ca entitate mutimedia008. iimagini ca entitate mutimedia
008. iimagini ca entitate mutimedia
 
007. culoare in entitati multimedia
007. culoare in entitati multimedia007. culoare in entitati multimedia
007. culoare in entitati multimedia
 
006. textul – entitate de studiu multimedia
006. textul – entitate de studiu multimedia006. textul – entitate de studiu multimedia
006. textul – entitate de studiu multimedia
 
005. html5 si canvas
005. html5 si canvas005. html5 si canvas
005. html5 si canvas
 
004. prelucrarea evenimentelor js
004. prelucrarea evenimentelor js004. prelucrarea evenimentelor js
004. prelucrarea evenimentelor js
 
003. manipularea cu dom
003. manipularea cu dom003. manipularea cu dom
003. manipularea cu dom
 
002. Introducere in type script
002. Introducere in type script002. Introducere in type script
002. Introducere in type script
 
001.Introducere in tehnologii mutimedia
001.Introducere in tehnologii mutimedia001.Introducere in tehnologii mutimedia
001.Introducere in tehnologii mutimedia
 

Webpack

  • 2. Lumea modernă a dezvoltării web ne deschide atât oportunități incredibile, cât și probleme. Pe scară pot fi împărțite în două: • Problemele globale • Problemele locale
  • 3. Probleme globale  Decuplarea deciziilor. HTML5 și JavaScript sunt soluții revoluționare care sunt create aproape în fiecare zi. Fiecare are propriile particularități, avantaje și dezavantaje. Toate acestea sunt concepute pentru a rezolva o mică, de fapt, o serie de sarcini: • jQuery, Knockout, Angular, Marionette, React - dacă dai peste detalii, toate acestea sunt create pentru a rezolva aceleași probleme. • Underscore, lodash, Lazy, ES6 - în multe feluri, pentru a lucra cu date. • MVC, MVVM, Flux - chiar și modele arhitecturale sunt create pentru a rezolva o sarcină.
  • 4. Varietate de versiuni de mărire mărește amploarea problemei: • Un plugin necesită jQuery 1.8, jQuery 2.1. • Angular 1.3 și Angular 2+ sunt aproape complet diferite. • Bootstrap 2.3 și Bootstrap 3.1 - componentele create pentru o versiune nu vor fi lăsate afară din cutie pentru alta.
  • 5. Formate pentru preprocesare (aici, de asemenea, containere), de exemplu: • LESS, SCSS, SASS, Stylus — pentru stiluri. • Handlebars, jade, EJS — pentru șabloane. • JSON, JSON5, PJSON, XML — pentru date. • CoffeeScript, JSX, ES6 — scripturi, etc
  • 6. Probleme locale  Complexitatea creșterii proiectului : • Funcțional - creați un prototip, adăugați o secțiune, faceți o formă, legați secțiunile între ele, etc. • Tehnologic - accesați Bootstrap, conectați Leaflet, implementați React, etc.
  • 7. Gestionarea dependenței. Atunci când în proiect apar cel puțin 3 scripturi, începe să jonglezi - trebuie să gândești întotdeauna: • Sunt încărcate bibliotecile? • Și stilurile necesare? • Cum rămâne cu șabloanele? Versionare
  • 8. Solutii Soluția cea mai optimă este ruperea codului în module izolate. Din punct de vedere istoric, au existat două abordări: AMD și CommonJS.
  • 9. Soluții populare • AMD (Asynchronous Module Definition) Se reduce la definiția modulului prin define () și apel prin require () • CommonJS Nativ implementat pe server-side JavaScript în Node.js / Rhino. Reducerea la definirea unui modul printr-o variabilă globală și un apel prin necesită ()
  • 10. • Grunt • Gulp • Browserify • SystemJS • Brunch • Rollup • Flipbox
  • 11. Webpack Webpack — este un constructor de module pentru aplicațiile JavaScript moderne. Când webpack-ul procesează aplicația dvs., acesta creează în mod recursiv un graf de dependență, care include toate modulele solicitate de aplicație, apoi pachete toate aceste module într-un număr specificat de fișiere - adesea doar unul - pentru încărcarea browserului.
  • 12.
  • 13. La nivel global, există două strategii pentru utilizarea webpack-ului  prin consola (potrivită pentru proiecte mici);  prin script-ul ca un modul Node.js. În ambele cazuri, avem nevoie Node.js si npm.
  • 14. Utilizarea consolei Pentru experiment, creați directorul src și dispuneți de un script index.js : console.log('Hello Habrahabr!'); Dosarul de assets va conține fișierele noastre de ieșire (scripturi, stiluri, imagini folosite de ele). Acestea sunt aceleași fișiere pe care le putem pune pe serverul nostru web, pe CDN etc.
  • 15. Utilizarea consolei Pentru a face acest lucru, trebuie să instalăm webpack la nivel global: npm install webpack –g Adunarea este efectuată de comandă: webpack src/index.js assets/bundle.js
  • 16. Использование в качестве модуля Это наиболее подходящая стратегия для средних и крупных проектов. В директории проекта создаём package.json. Это можно сделать командой: npm init Добавляем в проект модуль webpack: npm install webpack --save-dev
  • 17. Pentru a construi proiectul, vom crea scriptul Node.js. De exemplu, build.js:
  • 18. În ambele cazuri, vom obține directorul de active și bundle.js în acesta este fișierul nostru colectat, care conține index.js în sine și toate dependențele pe care le conectează. Este suficient să conectați numai acest fișier: Rulați ansamblul : node build
  • 19.
  • 20. Webpack este incredibil de flexibil în configurație, cu toate acestea, pentru început, este suficient să înțelegem patru concepte de bază: • entry (punctul de intrare), • output (iesire), • loaders (încarcatoare), • plugins (pluginuri).
  • 21. Punct de intrare(Entry) Webpack creează un grafic al tuturor dependențelor aplicației. Primul element al graficului este cunoscut ca punct de intrare. Punctul de intrare specifică webpack-ul, de unde să începeți să construiți graficul de dependență pentru a afla ce să conectați. Puteți specifica un punct de intrare ca cale către fișierul care lansează aplicația. Într-un WebPack, punctele de intrare sunt declarate în proprietatea de intrare a obiectului de configurare.
  • 23. Iesiri (Output) • După ce compilați și îmbinați toate ansamblurile dvs., trebuie să spuneți în continuare webpack unde va fi amplasat ansamblul. Proprietatea de ieșire indică WebPack modul de procesare a fișierelor de asamblare rezultate.
  • 24. output: { path: require("path").resolve("./public/_/"), publicPath: "/assets/", filename: "[name].js", chunkFilename: "[id].chunk.js"}
  • 25. • Încărcători (Loaders) Scopul este să vă asigurați că toate ansamblurile din proiectul dvs. sunt convertite prin intermediul pachetului web (deși acest lucru nu înseamnă că acestea ar trebui să fie combinate). Webpack tratează fiecare fișier (.css, .html, .scss, .jpg, etc.) ca modul. Cu toate acestea, webpack-ul însuși "înțelege" numai JavaScript.
  • 26. Încărcătoare au nevoie de webpack pentru două lucruri: • Determinați ce fișier este procesat de către care încărcător (proprietatea de test) • Conversia acestor fișiere astfel încât acestea să poată fi adăugate la graficul de dependență (și, în cele din urmă, la asamblare) (folosiți proprietatea)
  • 27. • conversia datelor dintr-un format în altul; • pot adăuga alte module pe ambalaj; • ca regulă, să facă o transformare; • lucrați cu un singur modul.
  • 28. • Pluginuri (Plugins) În timp ce încărcătorii efectuează numai transformări bazate pe fișiere, plug-in-urile sunt mai des folosite pentru a efectua acțiuni și conversii definite de utilizator la timpul de compilare sau părți ale ansamblului dvs. (și multe altele!). Webpack are un sistem foarte puternic și flexibil de conectare.
  • 29. • au acces la toate modulele (înainte și după transformare); • pot adăuga propriile module la pachet (de exemplu, "runtime"); • să aibă acces la toate resursele create după ambalare; • sunt folosite pentru a schimba configurația ansamblului, a optimiza, a adăuga unele obiecte la module, resurse de actualizare fierbinte.
  • 30. • webpack.optimize.UglifyJsPlugin — minimizarea codului folosind UglifyJS Toate minifactoarele moderne funcționează după cum urmează: • Dezasamblează codul JavaScript în arborele de sintaxă. (la fel, procedează orice interpretator JavaScript ) • Parcurg arborele, îl analizează și-l optimizează • Înscriu într-un arbore sintactic codul căpătat.
  • 31.
  • 32. • webpack.optimize.DedupePlugin — eliminarea modulelor duplicate. Dacă, de exemplu, folosiți bibliotecile Node.js terțe părți, atunci cel mai probabil, modulele pe care le utilizează pot fi duplicate. Acest plugin găsește module duplicate și le șterge. Acest lucru nu afectează stabilitatea codului, dar poate reduce semnificativ dimensiunea fișierului colectat.
  • 33. • ExtractTextPlugin vă permite să extrageți conținutul tuturor fișierelor CSS conectate într-un singur fișier CSS separat. Acest lucru vă permite să accelerați descărcarea, deoarece CSS este încărcat în mod asincron (paralel cu fișierele JS). Se recomandă utilizarea cu un număr mare de stiluri.
  • 34. • Webpack-dev-server lucrează “în memorie” (“server running in-memory”) — creează fișiere compilate în directorul de proiect. • “Hot Module Replacement (HMR)” — vă permite să actualizați module individuale ale paginii, fără să o restartați complet. Puterea completă poate fi experimentată atunci când este utilizată cu React.
  • 35. Server local pentru verificarea funcționării Webpack server local pentru a vedea rezultatul activității Webpack în browser. Acest plug- in se numește "nod- static" și nu are nimic de a face direct cu Webpack. Este doar un instrument util pentru anumite cazuri. { "scripts": { "start": "webpack", "serv": "static build" }, "devDependencies": { "html-webpack-plugin": "^2.28.0", "node-static": "^0.7.9", "webpack": "^2.2.1" } }
  • 36. Webpack —watch Webpack poate monitoriza modificările fișierelor și poate reconstrui automat pachetul (un fișier javascript care se conectează ca punct de intrare). Pentru a face acest lucru, adăugați cuvântul cheie "-watch" la scriptul npm. package.json "scripts": { "start": "webpack --watch", "serv": "static build" },
  • 37. Performanțe generale Webpack Lista de verificare a dezvoltării • webpack-dev-server (WDS) - Automatic Browser Refresh • Hot Module Replacement (HMR) – Appendix covers the topic in detail • Linting is a technique that allows you to detect code related issue through static analysis.
  • 38. Styling • ExtractTextPlugin - Separating CSS chapter covers how to achieve this • Autoprefixing - Autoprefixing chapter shows how to do this • The Eliminating Unused CSS - chapter explains the basic idea of this technique
  • 39. Assets • Loading Images • Loading Fonts • Minifying
  • 40. Caching • Splitting Bundles - Adding Hashes to Filenames • Code Splitting - Dynamic Loading • Adding Hashes to Filenames - Separating Manifest
  • 41. Optimization • Use ES6 module definition to leverage tree shaking • Environment Variables • Environment Variables • Web Workers
  • 42. Output • Tidying Up • Authoring Packages
  • 43. Sarcina 1. De instalat https://github.com/vuejs- templates/webpack 2. Descrieți structura fisierului de configurare WebPack 3. Ce plugin-uri Webpack sunt instalate? 4. Ce scripturi npm sunt descrise ? 5. Cum este realizată sincronizarea cu browser-lui în timpul dezvoltării? 6...