Bootstrap i Webpack
La guia oficial sobre com incloure i agrupar CSS i JavaScript de Bootstrap al vostre projecte mitjançant Webpack.
Configuració
Estem construint un projecte Webpack amb Bootstrap des de zero, de manera que hi ha alguns requisits previs i passos inicials abans de poder començar realment. Aquesta guia requereix que tingueu instal·lat Node.js i una mica de familiaritat amb el terminal.
-
Creeu una carpeta de projecte i configureu npm. Crearem la
my-project
carpeta i inicialitzarem npm amb l'-y
argument per evitar que ens faci totes les preguntes interactives.mkdir my-project && cd my-project npm init -y
-
Instal·leu Webpack. A continuació, hem d'instal·lar les nostres dependències de desenvolupament Webpack:
webpack
per al nucli de Webpack,webpack-cli
perquè puguem executar ordres Webpack des del terminal, iwebpack-dev-server
així poder executar un servidor de desenvolupament local. Utilitzem--save-dev
per indicar que aquestes dependències només són per al desenvolupament i no per a la producció.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Instal·leu Bootstrap. Ara podem instal·lar Bootstrap. També instal·larem Popper, ja que els nostres menús desplegables, finestres emergents i informació sobre eines en depenen per al seu posicionament. Si no teniu previst utilitzar aquests components, podeu ometre Popper aquí.
npm i --save bootstrap @popperjs/core
-
Instal·leu dependències addicionals. A més de Webpack i Bootstrap, necessitem unes quantes dependències més per importar i agrupar correctament el CSS i el JS de Bootstrap amb Webpack. Aquests inclouen Sass, alguns carregadors i Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Ara que tenim totes les dependències necessàries instal·lades, podem posar-nos a treballar creant els fitxers del projecte i important Bootstrap.
Estructura del projecte
Ja hem creat la my-project
carpeta i hem inicialitzat npm. Ara també crearem les nostres carpetes src
i per completar l'estructura del projecte. dist
Executeu el següent des de my-project
, o creeu manualment la carpeta i l'estructura de fitxers que es mostren a continuació.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Quan hàgiu acabat, el vostre projecte complet hauria de ser així:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
En aquest moment, tot està al lloc correcte, però Webpack no funcionarà perquè encara no hem omplert el nostre webpack.config.js
.
Configura Webpack
Amb les dependències instal·lades i la nostra carpeta de projectes preparada perquè comencem a codificar, ara podem configurar Webpack i executar el nostre projecte localment.
-
Obre
webpack.config.js
al teu editor. Com que està en blanc, haurem d'afegir-hi una configuració general perquè puguem iniciar el nostre servidor. Aquesta part de la configuració indica que Webpack havia de buscar el JavaScript del nostre projecte, on sortir el codi compilat a (dist
) i com hauria de comportar-se el servidor de desenvolupament (extraient de ladist
carpeta amb la recàrrega en calent).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 } }
-
A continuació omplim el nostre
dist/index.html
. Aquesta és la pàgina HTML que Webpack carregarà al navegador per utilitzar el CSS i el JS que hi afegirem en passos posteriors. Abans de poder fer-ho, hem de donar-li alguna cosa per renderitzar i incloure eloutput
JS del pas 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>
Estem inclòs una mica d'estil de Bootstrap aquí amb
div class="container"
i<button>
perquè vegem quan Webpack carrega el CSS de Bootstrap. -
Ara necessitem un script npm per executar Webpack. Obriu
package.json
i afegiu l'start
script que es mostra a continuació (ja hauríeu de tenir l'script de prova). Utilitzarem aquest script per iniciar el nostre servidor de desenvolupament Webpack local.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
I finalment, podem iniciar Webpack. Des de la
my-project
carpeta del vostre terminal, executeu aquest nou script npm afegit:npm start
A la següent i darrera secció d'aquesta guia, configurarem els carregadors de Webpack i importarem tots els CSS i JavaScript de Bootstrap.
Importa Bootstrap
La importació de Bootstrap a Webpack requereix els carregadors que hem instal·lat a la primera secció. Els hem instal·lat amb npm, però ara cal configurar Webpack per utilitzar-los.
-
Configura els carregadors a
webpack.config.js
. El vostre fitxer de configuració s'ha completat i hauria de coincidir amb el fragment següent. L'única part nova aquí és lamodule
secció.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' } ] } ] } }
Aquí teniu un resum de per què necessitem tots aquests carregadors.
style-loader
injecta el CSS en un<style>
element<head>
de la pàgina HTML,css-loader
ajuda a utilitzar@import
iurl()
,postcss-loader
és necessari per a l'Autoprefixer isass-loader
ens permet utilitzar Sass. -
Ara, importem el CSS de Bootstrap. Afegiu el següent a
src/scss/styles.scss
per importar tot el Sass d'origen de Bootstrap.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
També podeu importar els nostres fulls d'estil individualment si voleu. Llegiu els nostres documents d'importació de Sass per obtenir més informació.
-
A continuació, carreguem el CSS i importem el JavaScript de Bootstrap. Afegiu el següent a
src/js/main.js
per carregar el CSS i importar tots els JS de Bootstrap. Popper s'importarà automàticament mitjançant Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
També podeu importar connectors de JavaScript individualment segons sigui necessari per reduir les mides dels paquets:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Llegiu els nostres documents de JavaScript per obtenir més informació sobre com utilitzar els connectors de Bootstrap.
-
I ja has acabat! 🎉 Amb la font Sass i JS de Bootstrap completament carregades, ara el vostre servidor de desenvolupament local hauria de tenir aquest aspecte.
Ara podeu començar a afegir qualsevol component Bootstrap que vulgueu utilitzar. Assegureu-vos de consultar el projecte d'exemple Webpack complet per saber com incloure Sass personalitzat addicional i optimitzar la vostra compilació important només les parts del CSS i JS de Bootstrap que necessiteu.
Optimitzacions de producció
Depenent de la vostra configuració, és possible que vulgueu implementar algunes optimitzacions addicionals de seguretat i velocitat útils per executar el projecte en producció. Tingueu en compte que aquestes optimitzacions no s'apliquen al projecte d'exemple de Webpack i que les podeu implementar.
Extracció de CSS
El style-loader
que hem configurat anteriorment emet còmodament CSS al paquet, de manera que dist/index.html
no cal carregar manualment un fitxer CSS. Tanmateix, és possible que aquest enfocament no funcioni amb una política de seguretat de contingut estricta i pot convertir-se en un coll d'ampolla a la vostra aplicació a causa de la gran mida del paquet.
Per separar el CSS de manera que el puguem carregar directament des de dist/index.html
, utilitzeu el mini-css-extract-loader
connector Webpack.
Primer, instal·leu el connector:
npm install --save-dev mini-css-extract-plugin
A continuació, instància i utilitzeu el connector a la configuració de 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
},
{
Després d'executar -se de npm run build
nou, hi haurà un fitxer nou dist/main.css
, que contindrà tots els CSS importats per src/js/main.js
. Si visualitzeu dist/index.html
ara al vostre navegador, faltarà l'estil, tal com està ara a dist/main.css
. Podeu incloure el CSS generat de la dist/index.html
següent manera:
--- 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>
Extracció de fitxers SVG
El CSS de Bootstrap inclou diverses referències a fitxers SVG mitjançant data:
URIs en línia. Si definiu una política de seguretat de contingut per al vostre projecte que bloqueja els data:
URI de les imatges, aquests fitxers SVG no es carregaran. Podeu solucionar aquest problema extraient els fitxers SVG en línia mitjançant la funció de mòduls d'actius de Webpack.
Configureu Webpack per extreure fitxers SVG en línia com aquest:
--- 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: [
Després d'executar -se de npm run build
nou, trobareu els fitxers SVG extrets dist/icons
i referenciats correctament de CSS.
Veus alguna cosa malament o no actualitzada? Obriu un problema a GitHub . Necessites ajuda per resoldre problemes? Cerca o inicia una discussió a GitHub.