Ólafur Sverrir Kjartansson, osk@hi.is
- Webpack er notað til að þýða JavaScript modules
- Leysir úr dependencies og safnar öllum notuðum kóða í eitt bundle
- Bæði okkar eigin og úr NPM pökkum
- Ekki bara kóði! Getur líka séð um CSS, myndir og allskonar
- Getum notað
import
ogrequire
í kóða sem mun keyra á client- Webpack sér um að transpilea fyrir okkur þ.a. virki í öllum vöfrum
- Uppsetning
npm install --save-dev webpack webpack-cli
- Þurfum að aðgreina á milli kóða og túlkunar frá webpack
- Geymum kóða í
src/
og túlkun íbuild/
eðadist/
- Bundle er JavaScript skrá sem inniheldur inngangspunkt í forritið okkar
- Bootstrap kóði frá webpack og síðan allur notaður kóði í forriti
- Oft eitt bundle en líka hægt að skipta upp með code-splitting
Frá og með webpack 4 þarf ekki að skilgreina config skrá
- Skráum
"build": "webpack"
script
ípackage.json
og kóða ísrc/
- Fáum út production útgáfu af bundle í
dist/main.js
- Fáum út production útgáfu af bundle í
- Skráum
"dev": "webpack --mode development"
script
- Fáum út development útgáfu í
dist/main.js
- Fáum út development útgáfu í
mode
er ný stilling í webpack 4 sem segir til um hvort webpack eigi við bundle- Stillum með
production
,development
eðanone
- Sjálfgefið er
mode: 'production'
- Þegar við notum webpack setjum við yfirleitt upp einhverjar reglur um hvernig það á að virka
- Söfnum saman í
webpack.config.js
- nafn er venja, ekki krafa
- Keyrum með
webpack --config webpack.config.js
gegnum npm script - webpack config skrá er keyrð af node og verðum því að nota
require
þar
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
entry
er inngangspunktur eða inngangspunktar í forrit- Sjálfgefið gildi er
src/
- Sjálfgefið gildi er
- Webpack finnur dependencies útfrá þeim og útbýr dependency graph
- Getum skilgreint sem
string
, slóð á eina inngangspunktinnobject
, lyklar skilgreina mismunandi inngangspunkta sem mun hver útbúa sérstakt dependency grapharray
, fylki af strengjum og/eða hlutum
output
skilgreinir hvar bundles eru búnir til- Sjálfgefið gildi er
dist/
- Sjálfgefið gildi er
- Skilgreinum sem hlut með
filename
, nafn á bundle, t.d.bundle.js
path
, absolute slóð á möppu sem skrifa á í
- Ef við höfum marga inngangspunkta þurfum við að skilgreina
filename
með substitution, t.d.[name].js
const path = require('path');
module.exports = {
mode: 'development',
entry: {
a: './src/a.js',
b: './src/b.js',
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
}
};
- Við getum sótt NPM pakka og vísað í þá úr forritum og webpack mun skilja og bæta við bundle
- Stundum eru þessir pakkar mjög stórir, þurfum að passa upp á að forritið okkar blási ekki út
- Webpack hefur tree shaking reiknirit sem reynir að losa í burtu ónotaðan kóða
- Fer eftir pökkum hvort það virki rétt, þarf að passa, t.d. fyrir
lodash
- Fer eftir pökkum hvort það virki rétt, þarf að passa, t.d. fyrir
- Með loaders getum við látið webpack virka með fleiri skrám en bara JavaScript
- Loader breytir skrá í módul sem webpack skilur og getur sett í dependency graph
- Getum gert
import 'styles.css'
sem annars er óskilgreind hegðun
- Getum gert
- Loader er skilgreindur í hlut með
test
oguse
lykla
test
segir til um hvort skrá eigi að vera meðhöndluð af þessum loader eða ekkistring
fyrir nákvæma slóðRegExp
fyrir t.d. allarcss
skrár,test: /\.css$/
array
fyrir mörg tilvikfunction
ogobject
líka stutt- Ef við viljum sleppa eða aðeins leita á ákveðnum stöðum getum við sett
include
ogexclude
lykla á loader
use
skilgreinir loader eða loadera sem nota á, skilgreinum síðan meðstring
ef við vísum beint í loaderobject
ef við viljum stilla frekar, setjum þá loader í'loader'
, stillingar í'options'
array
ef við viljum að fleiri en einn loader keyri, keyra í skilgreindri röð- Við notum ekki
require
eðaimport
á loader, ef búið er að sækja loader í NPM er hægt að vísa í hann í confignpm install --save-dev style-loader
og vísum í með'style-loader'
module: {
rules: [
{
test: /\.css$/,
include: './src',
use: [
'style-loader',
{ loader: 'css-loader', options: {} },
],
}
]
}
style-loader
sér um að túlka CSS og skjóta inn stílum í<style>
css-loader
túlkarimport
,@import
,url()
o.þ.h.- Ef við viljum setja CSS í sér skrá getum við notað aðra loadera
extract-text-webpack-plugin
fyrir webpack 3 og fyrrimini-css-extract-plugin
fyrir webpack 4
file-loader
leyfir okkur að sækja skrár og nota- Sækir skrá og setur í
output
möppu með hash nafni og viðeigandi endingu- t.d.
/src/file.png
verður/dist/0dcbbaa7013869e351f.png
- t.d.
- Getum notað fyrir allskonar skrár, sjá Webpack: Asset Management
- Plugins eru leið til að auka við virkni webpack
- Skráum í fylki undir
plugins
- Geta átt við hluti á öllum stigum ferils
- Webpack teymi heldur úti slatta og mikið til á NPM
- HtmlWebpackPlugin útbýr
index.html
skrá fyrir okkur - Vísar rétt í þá bundles sem búnir eru til
- Getum líka skaffað template og injectað í það
- clean-webpack-plugin sér um að hreinsa
dist/
- Hreinsar allt út úr möppu áður en við buildum
- Ætti ekkert að vera þar inni sem ekki verður til í build skrefi
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
mode: 'production',
entry: './src/index.js',
plugins: [
new CleanWebpackPlugin(['dist']),
new HtmlWebpackPlugin()
],
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
- Webpack hefur tól til að hjálpa okkur við þróun
- Source maps geta verið stillt með
devtool
- Margir möguleikar frá því að gefa miklar upplýsingar yfir í að vera hröð
- Ef við keyrum
webpack --watch
fylgist webpack með öllum skrám í dependency graph og rebuildar ef eitthvað breytist
webpack-dev-server
tekur þetta einu skrefi lengra og býr til vefþjón sem endurhleður síðu eftir rebuild- Mikið af stillingum...
- Keyrum upp gegnum npm script:
"dev": "webpack-dev-server --open"
- Keyrir allt í minni svo við sjáum hluti ekki verða til í
dist/
- Þegar við keyrum
npm run eject
ícreate-react-app
verkefni eru öll config færð í rót verkefnis src/
mappa er látin vera- Notar webpack en líka sérsmíðuð script til að gera upplifun betri
- Mjög góðar athugasemdir í kóða sem er alveg þess virði að lesa í gegnum til að læra betur á
- Server-side rendering
- Hvernig getum við skrifað út HTML á server?
- Hot reloading á components
- Code-splitting
- Hvað gerist þegar verkefnið verður stærra?
- Margt, margt fleira
- Nóg til af öðrum starter kits
- React teymi heldur úti lista
- Next.js byggir á því að server rendera frá byrjun
- Ueno starter kit 🙈