Bootstrap & Webpack
Zvanični vodič o tome kako uključiti i povezati Bootstrap-ov CSS i JavaScript u svoj projekat koristeći Webpack.
Postaviti
Gradimo Webpack projekat s Bootstrapom od nule, tako da postoje neki preduvjeti i prvi koraci prije nego što zaista počnemo. Ovaj vodič zahtijeva od vas da imate instaliran Node.js i određeno poznavanje terminala.
-
Kreirajte direktorij projekta i postavite npm. Kreiraćemo
my-project
fasciklu i inicijalizovati npm sa-y
argumentom kako bismo izbegli da nam postavlja sva interaktivna pitanja.mkdir my-project && cd my-project npm init -y
-
Instalirajte Webpack. Zatim moramo instalirati naše ovisnosti o razvoju Webpack-a:
webpack
za jezgru Webpack-a,webpack-cli
tako da možemo pokrenuti naredbe Webpack-a s terminala iwebpack-dev-server
tako možemo pokrenuti lokalni razvojni server. Koristimo--save-dev
da signaliziramo da su ove zavisnosti 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 menii, iskačući oglasi i opisi alata zavise od toga za njihovo pozicioniranje. Ako ne planirate koristiti te komponente, ovdje možete izostaviti Poppera.
npm i --save bootstrap @popperjs/core
-
Instalirajte dodatne zavisnosti. Pored Webpack-a i Bootstrapa, potrebno nam je još nekoliko zavisnosti da bismo pravilno uvezli i povezali Bootstrap-ove CSS i JS sa Webpack-om. To uključuje Sass, neke loadere 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 pristupiti stvaranju projektnih datoteka i uvozu Bootstrapa.
Struktura projekta
Već smo kreirali my-project
folder i inicijalizirali npm. Sada ćemo također kreirati naše src
i dist
mape kako bismo zaokružili strukturu projekta. Pokrenite sljedeće iz my-project
, ili ručno kreirajte mapu i strukturu datoteka prikazanu ispod.
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 projekat bi trebao 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 popunili svoj webpack.config.js
.
Konfigurišite Webpack
Uz instalirane ovisnosti i našu mapu projekta koja je spremna za početak kodiranja, sada možemo konfigurirati Webpack i pokrenuti naš projekt lokalno.
-
Otvorite
webpack.config.js
u svom uređivaču. Pošto je prazan, moraćemo da mu dodamo neku šablonsku konfiguraciju kako bismo mogli da pokrenemo naš server. Ovaj dio konfiguracije govori Webpack-u da traži JavaScript našeg projekta, gdje će izvesti kompajlirani kod u (dist
) i kako bi se razvojni server trebao ponašati (povlačenje izdist
mape 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 popunjavamo naše
dist/index.html
. Ovo je HTML stranica koju će Webpack učitati u pretraživač kako bi koristio CSS i JS koji ćemo joj dodati u kasnijim koracima. Prije nego što to možemo učiniti, moramo mu dati nešto za renderiranje i uključitioutput
JS 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 Bootstrap stila sa
div class="container"
i<button>
tako da vidimo kada je Bootstrapov CSS učitan od strane Webpack-a. -
Sada nam je potrebna npm skripta za pokretanje Webpack-a. Otvorite
package.json
i dodajtestart
skriptu prikazanu ispod (trebalo bi da već imate testnu skriptu). Koristit ćemo ovu skriptu za pokretanje našeg lokalnog Webpack dev servera.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
I konačno, možemo pokrenuti Webpack. Iz
my-project
foldera na vašem terminalu pokrenite tu novododatu npm skriptu:npm start
U sljedećem i posljednjem odjeljku ovog vodiča, mi ćemo postaviti učitavače Webpack-a i uvesti sav Bootstrap-ov CSS i JavaScript.
Import Bootstrap
Uvoz Bootstrapa u Webpack zahtijeva učitače koje smo instalirali u prvom dijelu. Instalirali smo ih pomoću npm-a, ali sada Webpack mora biti konfiguriran da ih koristi.
-
Postavite utovarivače u
webpack.config.js
. Vaša konfiguracijska datoteka je sada završena i trebala bi odgovarati isječku ispod. Jedini novi dio ovdje jemodule
odjeljak.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 ovi utovarivači.
style-loader
ubacuje CSS u<style>
element na<head>
HTML stranici,css-loader
pomaže u korištenju@import
iurl()
,postcss-loader
potreban je za Autoprefixer isass-loader
omogućava nam korištenje Sass-a. -
Sada, hajde da uvezemo Bootstrap-ov CSS. Dodajte sljedeće u
src/scss/styles.scss
da uvezete sav izvorni Sass Bootstrapa.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Također možete uvesti naše stilove pojedinačno ako želite. Pročitajte naše Sass uvozne dokumente za detalje.
-
Zatim učitavamo CSS i uvozimo Bootstrap-ov JavaScript. Dodajte sljedeće u
src/js/main.js
da učitate CSS i uvezete sav Bootstrap-ov JS. Popper će biti automatski uvezen 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 uvesti JavaScript dodatke pojedinačno po 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 Bootstrap dodatke.
-
I gotovi ste! 🎉 Kada su izvorni Sass i JS Bootstrap potpuno učitani, vaš lokalni razvojni server bi sada trebao izgledati ovako.
Sada možete početi da dodajete sve komponente Bootstrapa koje želite da koristite. Obavezno provjerite kompletan Webpack projekt za primjer kako da uključite dodatni prilagođeni Sass i optimizirate svoju konstrukciju uvozom samo dijelova Bootstrap-ovog CSS-a i JS-a koji su vam potrebni.
Optimizacije proizvodnje
Ovisno o vašoj postavci, 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 primjer Webpack projekta i na vama je da implementirate.
Ekstrakcija CSS-a
Gore style-loader
smo konfigurisali zgodno emituje CSS u paket tako da ručno učitavanje CSS datoteke dist/index.html
nije potrebno. Međutim, ovaj pristup možda neće funkcionirati sa strogom politikom sigurnosti sadržaja i može postati usko grlo u vašoj aplikaciji zbog velike veličine paketa.
Da odvojite CSS tako da ga možemo učitati direktno iz dist/index.html
, koristite mini-css-extract-loader
dodatak Webpack.
Prvo instalirajte dodatak:
npm install --save-dev mini-css-extract-plugin
Zatim instancirajte i koristite dodatak u konfiguraciji Webpack-a:
--- 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 build
ponovnog pokretanja, pojavit će se nova datoteka dist/main.css
koja će sadržavati sav CSS uvezen od strane src/js/main.js
. Ako dist/index.html
sada pogledate u svom pretraživaču, stil će nedostajati, kao što je sada u dist/main.css
. Možete uključiti generirani CSS na sljedeći način dist/index.html
:
--- 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>
Ekstrahovanje SVG fajlova
Bootstrap-ov CSS uključuje višestruke reference na SVG datoteke putem inline data:
URI-ja. Ako definišete Politiku sigurnosti sadržaja za svoj projekat koja blokira data:
URI-je za slike, onda se ove SVG datoteke neće učitati. Ovaj problem možete zaobići tako što ćete izdvojiti ugrađene SVG datoteke koristeći Webpack-ovu funkciju modula sredstava.
Konfigurirajte Webpack za izdvajanje inline SVG fajlova na sljedeći način:
--- 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 build
ponovnog pokretanja, naći ćete SVG datoteke ekstrahirane u dist/icons
CSS i ispravno referencirane iz CSS-a.
Vidite ovdje nešto pogrešno ili zastarjelo? Molimo otvorite problem na GitHubu . Trebate pomoć u rješavanju problema? Pretražite ili započnite diskusiju na GitHubu.