Bootstrap & Webpack
Službeni vodič za uključivanje i spajanje Bootstrapovog CSS-a i JavaScripta u vaš projekt pomoću Webpacka.
Postaviti
Gradimo projekt Webpacka s Bootstrapom od nule, tako da postoje neki preduvjeti i početni koraci prije nego što stvarno počnemo. Ovaj vodič zahtijeva da imate instaliran Node.js i određeno poznavanje terminala.
-
Stvorite mapu projekta i postavite npm. Stvorit ćemo
my-projectmapu i inicijalizirati npm s-yargumentom kako bismo izbjegli da nam postavlja sva interaktivna pitanja.mkdir my-project && cd my-project npm init -y -
Instalirajte Webpack. Zatim moramo instalirati naše razvojne ovisnosti Webpacka:
webpackza jezgru Webpacka,webpack-clitako da možemo pokrenuti naredbe Webpacka s terminala, iwebpack-dev-servertako možemo pokrenuti lokalni razvojni poslužitelj. Koristimo--save-devkako bismo signalizirali da su ove ovisnosti samo za razvojnu upotrebu, a ne za proizvodnju.npm i --save-dev webpack webpack-cli webpack-dev-server -
Instalirajte Bootstrap. Sada možemo instalirati Bootstrap. Također ćemo instalirati Popper jer naši padajući izbornici, skočni prozori i opisi alata ovise o njemu za njihovo pozicioniranje. Ako ne planirate koristiti te komponente, ovdje možete izostaviti Popper.
npm i --save bootstrap @popperjs/core -
Instalirajte dodatne ovisnosti. Uz Webpack i Bootstrap, potrebno nam je još nekoliko ovisnosti kako bismo ispravno uvezli i povezali Bootstrapov CSS i JS s Webpackom. To uključuje Sass, neke učitavače i Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Sada kada imamo instalirane sve potrebne ovisnosti, možemo krenuti s radom na izradi projektnih datoteka i uvozu Bootstrapa.
Struktura projekta
Već smo stvorili my-projectmapu i inicijalizirali npm. Sada ćemo također stvoriti mape srci distkako bismo zaokružili strukturu projekta. Pokrenite sljedeće iz my-projectili ručno stvorite mapu i strukturu datoteke prikazanu u nastavku.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Kada završite, vaš kompletan projekt trebao bi izgledati ovako:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
U ovom trenutku sve je na pravom mjestu, ali Webpack neće raditi jer još nismo ispunili naš webpack.config.js.
Konfigurirajte Webpack
S instaliranim ovisnostima i mapom našeg projekta spremnom za početak kodiranja, sada možemo konfigurirati Webpack i pokrenuti naš projekt lokalno.
-
Otvorite
webpack.config.jsu uređivaču. Budući da je prazan, morat ćemo mu dodati neku standardnu konfiguraciju kako bismo mogli pokrenuti naš poslužitelj. Ovaj dio konfiguracije govori Webpacku da potraži JavaScript našeg projekta, gdje ispisati kompajlirani kod (dist) i kako bi se razvojni poslužitelj trebao ponašati (povlačenje izdistmape s vrućim ponovnim učitavanjem).const path = require('path') module.exports = { entry: './src/js/main.js', output: { filename: 'main.js', path: path.resolve(__dirname, 'dist') }, devServer: { static: path.resolve(__dirname, 'dist'), port: 8080, hot: true } } -
Zatim ispunjavamo naš
dist/index.html. Ovo je HTML stranica koju će Webpack učitati u preglednik kako bi iskoristio CSS i JS u paketu koje ćemo joj dodati u kasnijim koracima. Prije nego što to možemo učiniti, moramo mu dati nešto za renderiranje i uključitioutputJS iz prethodnog koraka.<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap w/ Webpack</title> </head> <body> <div class="container py-4 px-3 mx-auto"> <h1>Hello, Bootstrap and Webpack!</h1> <button class="btn btn-primary">Primary button</button> </div> <script src="./main.js"></script> </body> </html>Ovdje uključujemo malo Bootstrapovog stila s
div class="container"i<button>kako bismo vidjeli kada Webpack učitava Bootstrapov CSS. -
Sada nam treba npm skripta za pokretanje Webpacka. Otvorite
package.jsoni dodajtestartskriptu prikazanu u nastavku (trebali biste već imati testnu skriptu). Koristit ćemo ovu skriptu za pokretanje našeg lokalnog Webpack dev poslužitelja.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... } -
I konačno, možemo pokrenuti Webpack. Iz
my-projectmape na vašem terminalu pokrenite tu novododanu npm skriptu:npm start
U sljedećem i posljednjem odjeljku ovog vodiča, postavit ćemo učitavače Webpacka i uvesti sav Bootstrapov CSS i JavaScript.
Uvezi Bootstrap
Uvoz Bootstrapa u Webpack zahtijeva učitavače koje smo instalirali u prvom odjeljku. Instalirali smo ih s npm-om, ali sada Webpack treba biti konfiguriran za njihovu upotrebu.
-
Postavite utovarivače u
webpack.config.js. Vaša je konfiguracijska datoteka sada dovršena i trebala bi odgovarati isječku ispod. Jedini novi dio ovdje jemoduleodjeljak.const path = require('path') module.exports = { entry: './src/js/main.js', output: { filename: 'main.js', path: path.resolve(__dirname, 'dist') }, devServer: { static: path.resolve(__dirname, 'dist'), port: 8080, hot: true }, module: { rules: [ { test: /\.(scss)$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'postcss-loader', options: { postcssOptions: { plugins: () => [ require('autoprefixer') ] } } }, { loader: 'sass-loader' } ] } ] } }Evo rezimea zašto su nam potrebni svi ti utovarivači.
style-loaderubacuje CSS u<style>element na<head>HTML stranici,css-loaderpomaže u korištenju@importiurl(),postcss-loaderpotreban je za Autoprefixer isass-loaderomogućuje nam upotrebu Sass-a. -
Sada uvezimo Bootstrapov CSS. Dodajte sljedeće za
src/scss/styles.scssuvoz svih Bootstrapovih izvora Sass.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";Također možete pojedinačno uvesti naše tablice stilova ako želite. Za pojedinosti pročitajte naše Sass uvozne dokumente .
-
Zatim učitavamo CSS i uvozimo Bootstrapov JavaScript. Dodajte sljedeće za
src/js/main.jsučitavanje CSS-a i uvoz svih Bootstrapovih JS-ova. Popper će se automatski uvesti putem Bootstrapa.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'Također možete pojedinačno uvesti JavaScript dodatke prema potrebi kako biste smanjili veličinu paketa:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'Pročitajte naše JavaScript dokumente za više informacija o tome kako koristiti Bootstrapove dodatke.
-
I gotovi ste! 🎉 S punim učitavanjem Bootstrapovog izvornog koda Sass i JS, vaš bi lokalni razvojni poslužitelj sada trebao izgledati ovako.
Sada možete početi dodavati sve Bootstrap komponente koje želite koristiti. Obavezno provjerite cijeli projekt primjera Webpacka kako uključiti dodatni prilagođeni Sass i optimizirati svoju izgradnju uvozom samo dijelova Bootstrapovog CSS-a i JS-a koji su vam potrebni.
Optimizacije proizvodnje
Ovisno o vašim postavkama, možda ćete htjeti implementirati neke dodatne optimizacije sigurnosti i brzine korisne za pokretanje projekta u proizvodnji. Imajte na umu da se ove optimizacije ne primjenjuju na projekt primjera Webpacka i na vama je da ih implementirate.
Izdvajanje CSS-a
Gore style-loaderkonfigurirani prikladno emitira CSS u paket tako da ručno učitavanje CSS datoteke dist/index.htmlnije potrebno. Međutim, ovaj pristup možda neće funkcionirati uz strogu politiku sigurnosti sadržaja i može postati usko grlo u vašoj aplikaciji zbog velike veličine paketa.
Za odvajanje CSS-a kako bismo ga mogli učitati izravno iz dist/index.html, upotrijebite mini-css-extract-loaderdodatak Webpack.
Najprije instalirajte dodatak:
npm install --save-dev mini-css-extract-plugin
Zatim instancirajte i upotrijebite dodatak u konfiguraciji Webpacka:
--- a/webpack/webpack.config.js
+++ b/webpack/webpack.config.js
@@ -1,8 +1,10 @@
+const miniCssExtractPlugin = require('mini-css-extract-plugin')
const path = require('path')
module.exports = {
mode: 'development',
entry: './src/js/main.js',
+ plugins: [new miniCssExtractPlugin()],
output: {
filename: "main.js",
path: path.resolve(__dirname, "dist"),
@@ -18,8 +20,8 @@ module.exports = {
test: /\.(scss)$/,
use: [
{
- // Adds CSS to the DOM by injecting a `<style>` tag
- loader: 'style-loader'
+ // Extracts CSS for each JS file that includes CSS
+ loader: miniCssExtractPlugin.loader
},
{
Nakon npm run buildponovnog pokretanja, pojavit će se nova datoteka dist/main.csskoja će sadržavati sav CSS uvezen od strane src/js/main.js. Ako sada pogledate dist/index.htmlu svom pregledniku, stil će nedostajati, kao što je sada u dist/main.css. Generirani CSS možete uključiti dist/index.htmlovako:
--- a/webpack/dist/index.html
+++ b/webpack/dist/index.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="./main.css">
<title>Bootstrap w/ Webpack</title>
</head>
<body>
Izdvajanje SVG datoteka
Bootstrapov CSS uključuje višestruke reference na SVG datoteke putem ugrađenih data:URI-ja. Ako za svoj projekt definirate Pravila sigurnosti sadržaja koja blokiraju data:URI-je za slike, te se SVG datoteke neće učitati. Ovaj problem možete zaobići ekstrahiranjem ugrađenih SVG datoteka pomoću Webpackove značajke modula imovine.
Konfigurirajte Webpack za izdvajanje ugrađenih SVG datoteka ovako:
--- a/webpack/webpack.config.js
+++ b/webpack/webpack.config.js
@@ -16,6 +16,14 @@ module.exports = {
},
module: {
rules: [
+ {
+ mimetype: 'image/svg+xml',
+ scheme: 'data',
+ type: 'asset/resource',
+ generator: {
+ filename: 'icons/[hash].svg'
+ }
+ },
{
test: /\.(scss)$/,
use: [
Nakon npm run buildponovnog pokretanja, pronaći ćete SVG datoteke ekstrahirane u dist/iconsCSS i pravilno referencirane iz njega.
Ovdje vidite nešto pogrešno ili zastarjelo? Otvorite problem na GitHubu . Trebate li pomoć u rješavanju problema? Pretražite ili započnite raspravu na GitHubu.