Bootstrap és Webpack
A hivatalos útmutató a Bootstrap CSS- és JavaScript-kódjainak a Webpack használatával történő beépítéséhez és összekapcsolásához a projektben.
Beállít
Egy Webpack projektet építünk a Bootstrap segítségével a semmiből, így van néhány előfeltétel és első lépés, mielőtt igazán elkezdhetnénk. Ez az útmutató megköveteli, hogy telepítse a Node.js fájlt, és ismerje a terminált.
-
Hozzon létre egy projektmappát, és állítsa be az npm-et. Létrehozzuk a
my-project
mappát, és inicializáljuk az npm-et az-y
argumentummal, hogy elkerüljük, hogy minden interaktív kérdést tegyen fel nekünk.mkdir my-project && cd my-project npm init -y
-
Telepítse a Webpack-et. Ezután telepítenünk kell a Webpack fejlesztői függőségeinket:
webpack
a Webpack magjához,webpack-cli
hogy a terminálról Webpack parancsokat tudjunk futtatni, éswebpack-dev-server
így egy helyi fejlesztőszervert tudjunk futtatni. Azt szoktuk--save-dev
jelezni, hogy ezek a függőségek csak fejlesztési célokra szolgálnak, nem pedig termelési célokra.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Telepítse a Bootstrap programot. Most telepíthetjük a Bootstrap-et. A Poppert is telepíteni fogjuk, mivel a legördülő menük, felugró ablakaink és eszköztippjeink attól függnek, hogy elhelyezkedjenek. Ha nem tervezi ezeket az összetevőket használni, itt elhagyhatja a Poppert.
npm i --save bootstrap @popperjs/core
-
További függőségek telepítése. A Webpack és a Bootstrap mellett még néhány függőségre van szükségünk a Bootstrap CSS és JS megfelelő importálásához és csomagolásához a Webpack-kel. Ide tartozik a Sass, néhány rakodó és az Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Most, hogy minden szükséges függőséget telepítettünk, hozzáláthatunk a projektfájlok létrehozásához és a Bootstrap importálásához.
Projekt felépítése
Már létrehoztuk a my-project
mappát és inicializáltuk az npm-et. Most létrehozzuk a mi src
és dist
mappákat is, hogy kerekítsük a projekt szerkezetét. Futtassa a következőt a webhelyről my-project
, vagy hozza létre manuálisan az alább látható mappa- és fájlstruktúrát.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Ha elkészült, a teljes projektnek így kell kinéznie:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
Ezen a ponton minden a megfelelő helyen van, de a Webpack nem fog működni, mert még nem töltöttük ki webpack.config.js
.
Webpack konfigurálása
Miután a függőségek telepítve vannak, és projektmappánk készen áll a kódolás megkezdésére, most már konfigurálhatjuk a Webpack-et, és helyileg futtathatjuk projektünket.
-
Nyissa
webpack.config.js
meg a szerkesztőben. Mivel üres, hozzá kell adnunk néhány boilerplate konfigurációt, hogy elindíthassuk a szerverünket. A konfiguráció ezen része azt mondja a Webpack-nek, hogy keresse meg projektünk JavaScriptjét, hova írja ki a lefordított kódot a (dist
) helyre, és hogyan kell viselkednie a fejlesztőszervernek (dist
hot reload-os mappából való kihúzás).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 } }
-
Ezután töltsük ki a mi
dist/index.html
. Ez az a HTML-oldal, amelyet a Webpack betölt a böngészőbe, hogy felhasználja a csomagban található CSS-t és JS-t, amelyet később adunk hozzá. Mielőtt ezt megtehetnénk, meg kell adnunk valamit, hogy renderelje, és bele kelloutput
foglalnunk az előző lépés JS-jét.<!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>
Itt egy kis Bootstrap stílust adunk hozzá a
div class="container"
és<button>
-hoz, hogy lássuk, mikor tölti be a Bootstrap CSS-jét a Webpack. -
Most szükségünk van egy npm szkriptre a Webpack futtatásához. Nyissa meg
package.json
és adja hozzá azstart
alább látható szkriptet (a tesztszkriptnek már rendelkeznie kell). Ezt a szkriptet használjuk a helyi Webpack fejlesztői kiszolgáló elindításához.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
És végül elindíthatjuk a Webpack-et. A
my-project
terminál mappájából futtassa az újonnan hozzáadott npm szkriptet:npm start
Az útmutató következő és utolsó részében beállítjuk a Webpack betöltőket, és importáljuk a Bootstrap összes CSS-jét és JavaScriptjét.
Bootstrap importálása
A Bootstrap Webpackbe történő importálásához szükség van az első részben telepített betöltőkre. Az npm-mel telepítettük őket, de most be kell állítani a Webpack-et a használatukhoz.
-
Állítsa be a rakodókat ben
webpack.config.js
. A konfigurációs fájl elkészült, és meg kell egyeznie az alábbi kódrészlettel. Az egyetlen új rész itt amodule
szakasz.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' } ] } ] } }
Íme egy összefoglaló, miért van szükségünk ezekre a rakodókra.
style-loader
beilleszti a CSS-t a HTML oldal egyik<style>
elemébe , segít a és használatában , szükséges az Autoprefixerhez, és lehetővé teszi a Sass használatát.<head>
css-loader
@import
url()
postcss-loader
sass-loader
-
Most importáljuk a Bootstrap CSS-jét. Adja hozzá a következőt
src/scss/styles.scss
a Bootstrap Sass összes forráskódjának importálásához.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Ha akarja, stíluslapjainkat egyenként is importálhatja. A részletekért olvassa el a Sass importálási dokumentumait .
-
Ezután betöltjük a CSS-t, és importáljuk a Bootstrap JavaScriptjét.
src/js/main.js
A CSS betöltéséhez és a Bootstrap összes JS-jének importálásához adja hozzá a következőket . A Popper automatikusan importálásra kerül a Bootstrapen keresztül.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
A JavaScript-bővítményeket szükség szerint egyenként is importálhatja, hogy csökkentse a csomagméreteket:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Olvassa el JavaScript-dokumentumunkat , ha többet szeretne megtudni a Bootstrap beépülő moduljainak használatáról.
-
És kész! 🎉 Ha a Bootstrap Sass és JS forráskódja teljesen be van töltve, a helyi fejlesztőszervernek így kell kinéznie.
Most megkezdheti a használni kívánt Bootstrap összetevők hozzáadását. Feltétlenül nézze meg a teljes Webpack példaprojektet , hogy hogyan foglalhat bele további egyéni Sass-okat, és hogyan optimalizálhatja a buildet a Bootstrap CSS-jének és JS-jének csak a szükséges részei importálásával.
Gyártás optimalizálás
A beállítástól függően érdemes lehet további biztonsági és sebességoptimalizálásokat végrehajtani, amelyek hasznosak a projekt éles környezetben történő futtatásához. Vegye figyelembe, hogy ezeket az optimalizálásokat a Webpack példaprojektben nem alkalmazzák, és Önön múlik, hogy végre kell-e hajtani.
CSS kibontása
A fent konfigurált eszköz kényelmesen CSS-t bocsát ki a csomagba, így nem szükséges style-loader
manuálisan betölteni egy CSS-fájlt . dist/index.html
Előfordulhat azonban, hogy ez a megközelítés nem működik szigorú tartalombiztonsági szabályzat mellett, és szűk keresztmetszetet jelenthet az alkalmazásban a nagy csomagméret miatt.
A Webpack beépülő modul dist/index.html
használatával elválaszthatja a CSS-t, hogy közvetlenül innen tölthessük be.mini-css-extract-loader
Először telepítse a bővítményt:
npm install --save-dev mini-css-extract-plugin
Ezután példányosítsa és használja a beépülő modult a Webpack konfigurációban:
--- 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
},
{
Az újbóli futtatás után npm run build
egy új fájl dist/main.css
fog megjelenni, amely tartalmazza a által importált összes CSS-t src/js/main.js
. Ha most megtekinti dist/index.html
a böngészőjében, akkor a stílus hiányzik, ahogyan most a dist/main.css
. A generált CSS-t a következőképpen veheti fel dist/index.html
:
--- 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>
SVG fájlok kibontása
A Bootstrap CSS-je többszörös hivatkozást tartalmaz az SVG-fájlokra beépített data:
URI-n keresztül. Ha olyan tartalombiztonsági házirendet határoz meg a projekthez, amely blokkolja data:
a képek URI-jét, akkor ezek az SVG-fájlok nem töltődnek be. Megkerülheti ezt a problémát, ha a Webpack eszközmodulok funkciójával kibontja a soron belüli SVG-fájlokat.
Állítsa be a Webpack-et a soron belüli SVG-fájlok kibontásához, például:
--- 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: [
Az újbóli futtatás után npm run build
megtalálja az SVG-fájlokat dist/icons
a CSS-be kibontva és megfelelően hivatkozva rá.
Látsz itt valami rosszat vagy elavultat? Nyissa meg a problémát a GitHubon . Segítségre van szüksége a hibaelhárításhoz? Keressen vagy indítson beszélgetést a GitHubon.