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-project
mapu i inicijalizirati npm s-y
argumentom 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:
webpack
za jezgru Webpacka,webpack-cli
tako da možemo pokrenuti naredbe Webpacka s terminala, iwebpack-dev-server
tako možemo pokrenuti lokalni razvojni poslužitelj. Koristimo--save-dev
kako 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-project
mapu i inicijalizirali npm. Sada ćemo također stvoriti mape src
i dist
kako bismo zaokružili strukturu projekta. Pokrenite sljedeće iz my-project
ili 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.js
u 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 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 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č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 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.json
i dodajtestart
skriptu 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-project
mape 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 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 ti 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ćuje nam upotrebu Sass-a. -
Sada uvezimo Bootstrapov CSS. Dodajte sljedeće za
src/scss/styles.scss
uvoz 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.js
uč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-loader
konfigurirani prikladno emitira 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 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-loader
dodatak 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 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 sada pogledate dist/index.html
u svom pregledniku, stil će nedostajati, kao što je sada u dist/main.css
. Generirani CSS možete uključiti dist/index.html
ovako:
--- 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 build
ponovnog pokretanja, pronaći ćete SVG datoteke ekstrahirane u dist/icons
CSS 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.