Bootstrap e Webpack
La guida ufficiale su come includere e raggruppare CSS e JavaScript di Bootstrap nel tuo progetto usando Webpack.
Impostare
Stiamo costruendo da zero un progetto Webpack con Bootstrap, quindi ci sono alcuni prerequisiti e passaggi preliminari prima di poter davvero iniziare. Questa guida richiede l'installazione di Node.js e una certa familiarità con il terminale.
-
Crea una cartella di progetto e imposta npm. Creeremo la
my-project
cartella e inizializzeremo npm con l'-y
argomento per evitare che ci pongano tutte le domande interattive.mkdir my-project && cd my-project npm init -y
-
Installa Webpack. Quindi dobbiamo installare le nostre dipendenze di sviluppo Webpack:
webpack
per il nucleo di Webpack,webpack-cli
possiamo eseguire i comandi Webpack dal terminale ewebpack-dev-server
quindi possiamo eseguire un server di sviluppo locale. Usiamo--save-dev
per segnalare che queste dipendenze sono solo per uso di sviluppo e non per la produzione.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Installa Bootstrap. Ora possiamo installare Bootstrap. Installeremo anche Popper poiché i nostri menu a discesa, popover e suggerimenti dipendono da esso per il loro posizionamento. Se non prevedi di utilizzare questi componenti, puoi omettere Popper qui.
npm i --save bootstrap @popperjs/core
-
Installa dipendenze aggiuntive. Oltre a Webpack e Bootstrap, abbiamo bisogno di alcune dipendenze in più per importare e raggruppare correttamente CSS e JS di Bootstrap con Webpack. Questi includono Sass, alcuni caricatori e Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Ora che abbiamo installato tutte le dipendenze necessarie, possiamo metterci al lavoro creando i file di progetto e importando Bootstrap.
Struttura del progetto
Abbiamo già creato la my-project
cartella e inizializzato npm. Ora creeremo anche le nostre cartelle src
e per completare la struttura del progetto. dist
Eseguire quanto segue da my-project
o creare manualmente la struttura di cartelle e file mostrata di seguito.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Quando hai finito, il tuo progetto completo dovrebbe assomigliare a questo:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
A questo punto, tutto è al posto giusto, ma Webpack non funzionerà perché non abbiamo ancora compilato il nostro webpack.config.js
.
Configura Webpack
Con le dipendenze installate e la nostra cartella del progetto pronta per iniziare la codifica, ora possiamo configurare Webpack ed eseguire il nostro progetto in locale.
-
Apri
webpack.config.js
nel tuo editor. Dal momento che è vuoto, dovremo aggiungere alcune configurazioni standard ad esso in modo da poter avviare il nostro server. Questa parte della configurazione dice a Webpack di cercare JavaScript del nostro progetto, dove inviare il codice compilato in (dist
) e come dovrebbe comportarsi il server di sviluppo (estrazione dalladist
cartella con ricarica a caldo).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 } }
-
Successivamente riempiamo il nostro
dist/index.html
. Questa è la pagina HTML che Webpack caricherà nel browser per utilizzare CSS e JS in bundle che aggiungeremo ad essa nei passaggi successivi. Prima di poterlo fare, dobbiamo dargli qualcosa per il rendering e includere iloutput
JS dal passaggio precedente.<!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>
Stiamo includendo un po' di stile Bootstrap qui con
div class="container"
e<button>
in modo da vedere quando il CSS di Bootstrap viene caricato da Webpack. -
Ora abbiamo bisogno di uno script npm per eseguire Webpack. Apri
package.json
e aggiungi lostart
script mostrato di seguito (dovresti già avere lo script di test). Useremo questo script per avviare il nostro server di sviluppo Webpack locale.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
E infine, possiamo avviare Webpack. Dalla
my-project
cartella nel tuo terminale, esegui lo script npm appena aggiunto:npm start
Nella prossima e ultima sezione di questa guida, imposteremo i caricatori Webpack e importeremo tutti i CSS e JavaScript di Bootstrap.
Importa Bootstrap
L'importazione di Bootstrap in Webpack richiede i caricatori installati nella prima sezione. Li abbiamo installati con npm, ma ora Webpack deve essere configurato per utilizzarli.
-
Configura i caricatori in
webpack.config.js
. Il tuo file di configurazione è ora completo e dovrebbe corrispondere allo snippet di seguito. L'unica parte nuova qui è lamodule
sezione.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' } ] } ] } }
Ecco un riepilogo del motivo per cui abbiamo bisogno di tutti questi caricatori.
style-loader
inietta il CSS in un<style>
elemento nella<head>
pagina HTML,css-loader
aiuta con l'uso di@import
eurl()
,postcss-loader
è richiesto per Autoprefixer esass-loader
ci permette di usare Sass. -
Ora importiamo il CSS di Bootstrap. Aggiungi quanto segue a
src/scss/styles.scss
per importare tutti i sorgenti Sass di Bootstrap.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Puoi anche importare i nostri fogli di stile singolarmente, se lo desideri. Leggi i nostri documenti di importazione Sass per i dettagli.
-
Quindi carichiamo il CSS e importiamo JavaScript di Bootstrap. Aggiungi quanto segue per
src/js/main.js
caricare il CSS e importare tutto il JS di Bootstrap. Popper verrà importato automaticamente tramite Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Puoi anche importare i plug-in JavaScript individualmente secondo necessità per ridurre le dimensioni dei pacchetti:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Leggi i nostri documenti JavaScript per ulteriori informazioni su come utilizzare i plugin di Bootstrap.
-
E hai finito! 🎉 Con i sorgenti Sass e JS di Bootstrap completamente caricati, il tuo server di sviluppo locale dovrebbe ora avere questo aspetto.
Ora puoi iniziare ad aggiungere qualsiasi componente Bootstrap che desideri utilizzare. Assicurati di controllare il progetto di esempio Webpack completo per come includere Sass personalizzato aggiuntivo e ottimizzare la tua build importando solo le parti di CSS e JS di Bootstrap di cui hai bisogno.
Ottimizzazioni della produzione
A seconda della configurazione, potresti voler implementare alcune ottimizzazioni di sicurezza e velocità aggiuntive utili per eseguire il progetto in produzione. Si noti che queste ottimizzazioni non vengono applicate al progetto di esempio Webpack e l'implementazione spetta all'utente.
Estrazione CSS
La style-loader
configurazione precedente emette convenientemente CSS nel pacchetto in modo che dist/index.html
non sia necessario caricare manualmente un file CSS. Tuttavia, questo approccio potrebbe non funzionare con una politica di sicurezza dei contenuti rigorosa e potrebbe diventare un collo di bottiglia nell'applicazione a causa delle grandi dimensioni del pacchetto.
Per separare il CSS in modo da poterlo caricare direttamente da dist/index.html
, usa il mini-css-extract-loader
plugin Webpack.
Innanzitutto, installa il plug-in:
npm install --save-dev mini-css-extract-plugin
Quindi istanziare e utilizzare il plug-in nella configurazione del 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
},
{
Dopo l'esecuzione di npm run build
nuovo, ci sarà un nuovo file dist/main.css
, che conterrà tutti i CSS importati da src/js/main.js
. Se visualizzi dist/index.html
ora nel tuo browser, lo stile mancherà, poiché ora è in dist/main.css
. Puoi includere il CSS generato in dist/index.html
questo modo:
--- 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>
Estrazione di file SVG
Il CSS di Bootstrap include più riferimenti ai file SVG tramite data:
URI inline. Se definisci una politica di sicurezza dei contenuti per il tuo progetto che blocca data:
gli URI per le immagini, questi file SVG non verranno caricati. Puoi aggirare questo problema estraendo i file SVG in linea utilizzando la funzione dei moduli di risorse di Webpack.
Configura Webpack per estrarre i file SVG inline come questo:
--- 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: [
Dopo aver eseguito di npm run build
nuovo, troverai i file SVG estratti dist/icons
e correttamente referenziati da CSS.
Vedi qualcosa che non va o non è aggiornato qui? Si prega di aprire un problema su GitHub . Hai bisogno di aiuto per la risoluzione dei problemi? Cerca o avvia una discussione su GitHub.