Bootstrap & Webpack
Uradni vodnik za vključitev in povezovanje Bootstrapovega CSS in JavaScripta v vaš projekt s pomočjo Webpacka.
Nastaviti
Projekt Webpack z Bootstrapom gradimo od začetka, tako da obstaja nekaj predpogojev in začetnih korakov, preden lahko zares začnemo. Ta priročnik zahteva, da imate nameščen Node.js in nekaj znanja o terminalu.
-
Ustvarite mapo projekta in nastavite npm. Ustvarili bomo
my-project
mapo in inicializirali npm z-y
argumentom, da se izognemo postavljanju vseh interaktivnih vprašanj.mkdir my-project && cd my-project npm init -y
-
Namestite Webpack. Nato moramo namestiti naše razvojne odvisnosti Webpack:
webpack
za jedro Webpacka,webpack-cli
da lahko izvajamo ukaze Webpack s terminala inwebpack-dev-server
da lahko izvajamo lokalni razvojni strežnik. Uporabljamo--save-dev
za signaliziranje, da so te odvisnosti samo za razvojno uporabo in ne za proizvodnjo.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Namestite Bootstrap. Zdaj lahko namestimo Bootstrap. Namestili bomo tudi Popper, saj so naši spustni meniji, pojavna okna in opisi orodij odvisni od tega za njihovo pozicioniranje. Če teh komponent ne nameravate uporabljati, lahko Popperja tukaj izpustite.
npm i --save bootstrap @popperjs/core
-
Namestite dodatne odvisnosti. Poleg Webpacka in Bootstrapa potrebujemo še nekaj odvisnosti za pravilen uvoz in povezovanje Bootstrapovega CSS in JS s Webpackom. Sem spadajo Sass, nekateri nalagalniki in Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Zdaj, ko imamo nameščene vse potrebne odvisnosti, lahko začnemo ustvarjati projektne datoteke in uvažati Bootstrap.
Struktura projekta
Mapo smo že ustvarili my-project
in inicializirali npm. Zdaj bomo ustvarili tudi naše src
in dist
mape, da zaokrožimo strukturo projekta. Zaženite naslednje iz my-project
ali ročno ustvarite strukturo map in datotek, prikazano spodaj.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Ko končate, bi moral vaš celoten projekt izgledati takole:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
Na tej točki je vse na pravem mestu, vendar Webpack ne bo deloval, ker še nismo izpolnili našega webpack.config.js
.
Konfigurirajte Webpack
Z nameščenimi odvisnostmi in našo projektno mapo, pripravljeno za začetek kodiranja, lahko zdaj konfiguriramo Webpack in izvajamo naš projekt lokalno.
-
Odprite
webpack.config.js
v urejevalniku. Ker je prazen, mu bomo morali dodati nekaj standardne konfiguracije, da bomo lahko zagnali naš strežnik. Ta del konfiguracije pove Webpacku, naj poišče JavaScript našega projekta, kam naj izpiše prevedeno kodo v (dist
) in kako naj se obnaša razvojni strežnik (vlečenje izdist
mape z vročim ponovnim nalaganjem).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 } }
-
Nato izpolnimo našo
dist/index.html
. To je stran HTML, ki jo bo Webpack naložil v brskalnik za uporabo združenih CSS in JS, ki ji jih bomo dodali v kasnejših korakih. Preden lahko to storimo, mu moramo dati nekaj za upodabljanje in vključitioutput
JS iz prejšnjega 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>
Tu smo vključili delček Bootstrapovega sloga z
div class="container"
in<button>
tako, da vidimo, kdaj Webpack naloži Bootstrapov CSS. -
Zdaj potrebujemo skript npm za zagon Webpacka. Odprite
package.json
in dodajtestart
skript, prikazan spodaj (preskusni skript bi morali že imeti). Ta skript bomo uporabili za zagon našega lokalnega razvijalskega strežnika Webpack.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
In končno lahko zaženemo Webpack. Iz
my-project
mape v vašem terminalu zaženite ta na novo dodan skript npm:npm start
V naslednjem in zadnjem razdelku tega vodnika bomo nastavili nalagalnike Webpack in uvozili vse Bootstrapove CSS in JavaScript.
Uvozi Bootstrap
Za uvoz Bootstrapa v Webpack so potrebni nalagalniki, ki smo jih namestili v prvem razdelku. Namestili smo jih z npm, zdaj pa je treba Webpack konfigurirati za njihovo uporabo.
-
Nastavite nakladalce v
webpack.config.js
. Vaša konfiguracijska datoteka je zdaj dokončana in bi se morala ujemati s spodnjim delčkom. Edini nov del tukaj jemodule
razdelek.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' } ] } ] } }
Tukaj je povzetek, zakaj potrebujemo vse te nakladalce.
style-loader
vstavi CSS v<style>
element na<head>
strani HTML,css-loader
pomaga pri uporabi@import
inurl()
,postcss-loader
je potreben za Autoprefixer insass-loader
nam omogoča uporabo Sass. -
Zdaj pa uvozimo Bootstrapov CSS.
src/scss/styles.scss
Če želite uvoziti vse Bootstrapove izvorne kode Sass, dodajte naslednje .// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Naše slogovne tabele lahko uvozite tudi posamično, če želite. Za podrobnosti preberite naše dokumente o uvozu Sass .
-
Nato naložimo CSS in uvozimo Bootstrapov JavaScript. Dodajte naslednje,
src/js/main.js
da naložite CSS in uvozite vse Bootstrapove JS. Popper bo samodejno uvožen prek programa Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Po potrebi lahko uvozite tudi vtičnike JavaScript posamično, da zmanjšate velikost paketov:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Preberite naše dokumente JavaScript za več informacij o uporabi vtičnikov Bootstrap.
-
In končali ste! 🎉 Ko sta izvorna koda Bootstrap Sass in JS v celoti naložena, bi moral vaš lokalni razvojni strežnik videti takole.
Zdaj lahko začnete dodajati vse komponente Bootstrap, ki jih želite uporabiti. Prepričajte se, da si ogledate celoten primer projekta Webpack za vključitev dodatnih Sass po meri in optimiziranje vaše gradnje z uvozom samo delov Bootstrapovega CSS in JS, ki jih potrebujete.
Optimizacije proizvodnje
Odvisno od vaše nastavitve boste morda želeli implementirati nekaj dodatnih varnostnih in hitrostnih optimizacij, ki so uporabne za izvajanje projekta v produkciji. Upoštevajte, da te optimizacije niso uporabljene na vzorčnem projektu Webpack in je odvisno od vas, da jih implementirate.
Ekstrahiranje CSS
Zgoraj style-loader
smo konfigurirali priročno oddaja CSS v sveženj, tako da ročno nalaganje datoteke CSS dist/index.html
ni potrebno. Ta pristop morda ne bo deloval s strogim pravilnikom o varnosti vsebine in lahko postane ozko grlo v vaši aplikaciji zaradi velike velikosti svežnja.
Če želite ločiti CSS, tako da ga lahko naložimo neposredno iz dist/index.html
, uporabite mini-css-extract-loader
vtičnik Webpack.
Najprej namestite vtičnik:
npm install --save-dev mini-css-extract-plugin
Nato ustvarite in uporabite vtičnik v konfiguraciji 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
},
{
Po ponovnem zagonu npm run build
bo na voljo nova datoteka dist/main.css
, ki bo vsebovala vse CSS, ki jih je uvozil src/js/main.js
. Če si dist/index.html
zdaj ogledate v brskalniku, bo slog manjkal, kot je zdaj v dist/main.css
. Ustvarjeni CSS lahko vključite dist/index.html
takole:
--- 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>
Ekstrahiranje datotek SVG
Bootstrapov CSS vključuje več sklicev na datoteke SVG prek vgrajenih data:
URI-jev. Če za svoj projekt določite pravilnik o varnosti vsebine, ki blokira data:
URI-je za slike, se te datoteke SVG ne bodo naložile. To težavo lahko rešite tako, da ekstrahirate vgrajene datoteke SVG s funkcijo modulov sredstev Webpack.
Konfigurirajte Webpack za ekstrahiranje vgrajenih datotek SVG, kot je ta:
--- 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: [
Po ponovnem zagonu npm run build
boste našli datoteke SVG, ekstrahirane v dist/icons
CSS in nanje pravilno navedene.
Vidite tukaj nekaj narobe ali zastarelo? Odprite vprašanje na GitHubu . Potrebujete pomoč pri odpravljanju težav? Iščite ali začnite razpravo na GitHubu.