Bootstrap și Webpack
Ghidul oficial despre cum să includeți și să grupați CSS și JavaScript din Bootstrap în proiectul dvs. folosind Webpack.
Înființat
Construim un proiect Webpack cu Bootstrap de la zero, așa că există câteva cerințe preliminare și pași inițiali înainte de a putea începe cu adevărat. Acest ghid necesită să aveți instalat Node.js și să fiți familiarizat cu terminalul.
-
Creați un folder de proiect și configurați npm. Vom crea
my-project
folderul și vom inițializa npm cu-y
argumentul pentru a evita ca acesta să ne pună toate întrebările interactive.mkdir my-project && cd my-project npm init -y
-
Instalați Webpack. Apoi, trebuie să instalăm dependențele noastre de dezvoltare Webpack:
webpack
pentru nucleul Webpack,webpack-cli
astfel încât să putem rula comenzi Webpack de la terminal șiwebpack-dev-server
astfel să putem rula un server de dezvoltare local. Folosim--save-dev
să semnalăm că aceste dependențe sunt doar pentru dezvoltare și nu pentru producție.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Instalați Bootstrap. Acum putem instala Bootstrap. De asemenea, vom instala Popper, deoarece meniurile noastre derulante, popover-urile și sfaturile de instrumente depind de el pentru poziționarea lor. Dacă nu intenționați să utilizați acele componente, puteți omite Popper aici.
npm i --save bootstrap @popperjs/core
-
Instalați dependențe suplimentare. Pe lângă Webpack și Bootstrap, avem nevoie de încă câteva dependențe pentru a importa și a combina corect CSS și JS Bootstrap cu Webpack. Acestea includ Sass, unele încărcătoare și Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Acum că avem toate dependențele necesare instalate, ne putem pune pe treabă creând fișierele de proiect și importând Bootstrap.
Structura proiectului
Am creat deja my-project
folderul și am inițializat npm. Acum vom crea src
și dist
folderele noastre și pentru a completa structura proiectului. Rulați următoarele din my-project
, sau creați manual folderul și structura fișierelor prezentate mai jos.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Când ați terminat, proiectul dvs. complet ar trebui să arate astfel:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
În acest moment, totul este la locul potrivit, dar Webpack nu va funcționa deoarece nu am completat webpack.config.js
încă.
Configurați Webpack
Cu dependențele instalate și folderul nostru de proiect gata pentru ca noi să începem codificarea, acum putem configura Webpack și rula proiectul nostru local.
-
Deschideți
webpack.config.js
în editorul dvs. Deoarece este gol, va trebui să îi adăugăm niște configurații standard, astfel încât să putem porni serverul nostru. Această parte a configurației spune Webpack-ului să caute JavaScript-ul proiectului nostru, unde să scoată codul compilat către (dist
) și cum ar trebui să se comporte serverul de dezvoltare (trag dindist
folderul cu reîncărcare la cald).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 } }
-
În continuare completăm
dist/index.html
. Aceasta este pagina HTML pe care Webpack-ul va fi încărcat în browser pentru a utiliza CSS și JS pe care îl vom adăuga în pașii ulterioare. Înainte de a putea face asta, trebuie să îi dăm ceva pentru a reda și să includemoutput
JS-ul de la pasul anterior.<!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>
Includem un pic de stil Bootstrap aici cu
div class="container"
și ,<button>
astfel încât să vedem când CSS-ul Bootstrap este încărcat de Webpack. -
Acum avem nevoie de un script npm pentru a rula Webpack. Deschideți
package.json
și adăugațistart
scriptul afișat mai jos (ar trebui să aveți deja scriptul de testare). Vom folosi acest script pentru a porni serverul nostru local de dezvoltare Webpack.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
Și, în sfârșit, putem porni Webpack. Din
my-project
folderul din terminalul dvs., rulați acel script npm nou adăugat:npm start
În următoarea și ultima secțiune a acestui ghid, vom configura încărcătoarele Webpack și vom importa toate CSS și JavaScript din Bootstrap.
Import Bootstrap
Importarea Bootstrap în Webpack necesită încărcătoarele pe care le-am instalat în prima secțiune. Le-am instalat cu npm, dar acum Webpack trebuie configurat pentru a le folosi.
-
Configurați încărcătoarele în
webpack.config.js
. Fișierul dvs. de configurare este acum complet și ar trebui să se potrivească cu fragmentul de mai jos. Singura parte nouă aici estemodule
secțiunea.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' } ] } ] } }
Iată o recapitulare a motivului pentru care avem nevoie de toate aceste încărcătoare.
style-loader
injectează CSS într-un<style>
element din<head>
pagina HTML,css-loader
ajută la utilizarea@import
șiurl()
,postcss-loader
este necesar pentru Autoprefixer șisass-loader
ne permite să folosim Sass. -
Acum, să importăm CSS-ul Bootstrap. Adăugați următoarele la
src/scss/styles.scss
pentru a importa toate sursele Bootstrap Sass.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
De asemenea, puteți importa foile noastre de stil individual dacă doriți. Citiți documentele noastre de import Sass pentru detalii.
-
Apoi încărcăm CSS și importăm JavaScript-ul Bootstrap. Adăugați următoarele pentru
src/js/main.js
a încărca CSS-ul și a importa toate JS-urile Bootstrap. Popper va fi importat automat prin Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
De asemenea, puteți importa pluginuri JavaScript individual, după cum este necesar, pentru a menține dimensiunile pachetelor mai mici:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Citiți documentele noastre JavaScript pentru mai multe informații despre cum să utilizați pluginurile Bootstrap.
-
Și ai terminat! 🎉 Cu sursa Bootstrap Sass și JS complet încărcate, serverul tău de dezvoltare local ar trebui acum să arate așa.
Acum puteți începe să adăugați orice componente Bootstrap pe care doriți să le utilizați. Asigurați-vă că consultați exemplul de proiect Webpack complet pentru a afla cum să includeți Sass personalizat suplimentar și să vă optimizați construcția importând numai părțile CSS și JS Bootstrap de care aveți nevoie.
Optimizări de producție
În funcție de configurația dvs., este posibil să doriți să implementați câteva optimizări suplimentare de securitate și viteză utile pentru rularea proiectului în producție. Rețineți că aceste optimizări nu sunt aplicate pe proiectul exemplu Webpack și sunt la latitudinea dvs. să le implementați.
Extragerea CSS
Configurația style-loader
pe care am configurat-o mai sus emite CSS în mod convenabil în pachet, astfel încât să nu fie necesară încărcarea manuală a unui fișier CSS dist/index.html
. Cu toate acestea, această abordare poate să nu funcționeze cu o politică strictă de securitate a conținutului și poate deveni un blocaj în aplicația dvs. din cauza dimensiunii mari a pachetului.
Pentru a separa CSS-ul astfel încât să îl putem încărca direct din dist/index.html
, utilizați mini-css-extract-loader
pluginul Webpack.
Mai întâi, instalați pluginul:
npm install --save-dev mini-css-extract-plugin
Apoi instanțiați și utilizați pluginul în configurația Webpack:
--- 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
},
{
După rularea npm run build
din nou, va exista un fișier nou dist/main.css
, care va conține toate CSS-urile importate de src/js/main.js
. Dacă vizualizați dist/index.html
acum în browser, stilul va lipsi, așa cum este acum în dist/main.css
. Puteți include CSS-ul generat dist/index.html
astfel:
--- 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>
Extragerea fișierelor SVG
CSS-ul Bootstrap include mai multe referințe la fișiere SVG prin intermediul data:
URI-urilor inline. Dacă definiți o politică de securitate a conținutului pentru proiectul dvs. care blochează data:
URI-urile pentru imagini, atunci aceste fișiere SVG nu se vor încărca. Puteți rezolva această problemă extragând fișierele SVG în linie utilizând caracteristica modulelor de active ale Webpack.
Configurați Webpack pentru a extrage fișiere SVG inline astfel:
--- 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: [
După ce rulați npm run build
din nou, veți găsi fișierele SVG extrase dist/icons
și referite corect din CSS.
Vedeți ceva în neregulă sau depășit aici? Vă rugăm să deschideți o problemă pe GitHub . Aveți nevoie de ajutor pentru depanare? Căutați sau începeți o discuție pe GitHub.