Bootstrap & Webpack
Udhëzuesi zyrtar për mënyrën e përfshirjes dhe bashkimit të CSS dhe JavaScript të Bootstrap në projektin tuaj duke përdorur Webpack.
Konfigurimi
Ne po ndërtojmë një projekt Webpack me Bootstrap nga e para, kështu që ka disa parakushte dhe hapa të parë përpara se të mund të fillojmë vërtet. Ky udhëzues kërkon që ju të keni të instaluar Node.js dhe njëfarë njohjeje me terminalin.
-
Krijoni një dosje projekti dhe konfiguroni npm. Ne do të krijojmë
my-project
dosjen dhe do të inicializojmë npm me-y
argumentin për të shmangur që ai të na bëjë të gjitha pyetjet ndërvepruese.mkdir my-project && cd my-project npm init -y
-
Instaloni Webpack. Më pas, ne duhet të instalojmë varësitë tona të zhvillimit të Webpack:
webpack
për thelbin e Webpack,webpack-cli
që të mund të ekzekutojmë komandat e Webpack nga terminali dhewebpack-dev-server
kështu të mund të ekzekutojmë një server lokal zhvillimi. Ne përdorim--save-dev
për të sinjalizuar se këto varësi janë vetëm për përdorim zhvillimor dhe jo për prodhim.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Instaloni Bootstrap. Tani mund të instalojmë Bootstrap. Ne do të instalojmë gjithashtu Popper meqenëse pikat tona të lëshimit, popover-et dhe këshillat e veglave varen prej tij për pozicionimin e tyre. Nëse nuk planifikoni t'i përdorni ato komponentë, mund ta hiqni Popper këtu.
npm i --save bootstrap @popperjs/core
-
Instaloni varësi shtesë. Përveç Webpack dhe Bootstrap, ne kemi nevojë për disa varësi të tjera për të importuar dhe bashkuar siç duhet CSS dhe JS të Bootstrap me Webpack. Këto përfshijnë Sass, disa ngarkues dhe Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Tani që kemi të gjitha varësitë e nevojshme të instaluara, mund të fillojmë punën për krijimin e skedarëve të projektit dhe importimin e Bootstrap.
Struktura e projektit
Ne kemi krijuar tashmë my-project
dosjen dhe kemi inicializuar npm. Tani do të krijojmë gjithashtu dosjet tona src
dhe dist
për të përmbyllur strukturën e projektit. Ekzekutoni sa vijon nga my-project
, ose krijoni manualisht strukturën e dosjes dhe skedarit të treguar më poshtë.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Kur të keni mbaruar, projekti juaj i plotë duhet të duket kështu:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
Në këtë pikë, gjithçka është në vendin e duhur, por Webpack nuk do të funksionojë sepse ne nuk e kemi plotësuar webpack.config.js
ende.
Konfiguro paketën e uebit
Me varësitë e instaluara dhe dosjen tonë të projektit gati që ne të fillojmë kodimin, tani mund të konfigurojmë paketën e uebit dhe ta ekzekutojmë projektin tonë në nivel lokal.
-
Hapeni
webpack.config.js
në redaktorin tuaj. Meqenëse është bosh, do të na duhet të shtojmë disa konfigurime të pllakës së bojlerit në të që të mund të nisim serverin tonë. Kjo pjesë e konfigurimit tregon se Webpack duhej të kërkonte JavaScript-in e projektit tonë, ku të nxirrte kodin e përpiluar në (dist
), dhe si duhet të sillet serveri i zhvillimit (duke tërhequr ngadist
dosja me rifreskimin e nxehtë).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 } }
-
Më pas plotësojmë tonën
dist/index.html
. Kjo është faqja HTML Webpack që do të ngarkojë në shfletues për të përdorur CSS dhe JS të bashkuara që do t'i shtojmë në hapat e mëvonshëm. Përpara se ta bëjmë këtë, duhet t'i japim diçka për të dhënë dhe të përfshijmëoutput
JS nga hapi i mëparshëm.<!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>
Ne po përfshijmë këtu një stil të vogël Bootstrap me
div class="container"
dhe në<button>
mënyrë që të shohim kur CSS e Bootstrap ngarkohet nga Webpack. -
Tani na duhet një skript npm për të ekzekutuar Webpack. Hapni
package.json
dhe shtonistart
skriptin e treguar më poshtë (duhet ta keni tashmë skriptin e testimit). Ne do ta përdorim këtë skript për të nisur serverin tonë lokal të zhvillimit të Webpack.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
Dhe së fundi, ne mund të fillojmë Webpack. Nga
my-project
dosja në terminalin tuaj, ekzekutoni skriptin e sapo shtuar npm:npm start
Në seksionin tjetër dhe të fundit të këtij udhëzuesi, ne do të konfigurojmë ngarkuesit e Uebpack dhe do të importojmë të gjithë CSS dhe JavaScript të Bootstrap.
Importo Bootstrap
Importimi i Bootstrap në Webpack kërkon ngarkuesit që kemi instaluar në seksionin e parë. Ne i kemi instaluar ato me npm, por tani Webpack duhet të konfigurohet për t'i përdorur ato.
-
Vendosni ngarkuesit në
webpack.config.js
. Skedari juaj i konfigurimit tani është i plotë dhe duhet të përputhet me fragmentin më poshtë. E vetmja pjesë e re këtu ështëmodule
seksioni.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' } ] } ] } }
Këtu është një përmbledhje se pse na duhen të gjithë këta ngarkues.
style-loader
injekton CSS në një<style>
element në<head>
faqen HTML,css-loader
ndihmon me përdorimin@import
dheurl()
,postcss-loader
kërkohet për Autoprefiksuesin dhesass-loader
na lejon të përdorim Sass. -
Tani, le të importojmë CSS të Bootstrap. Shtoni sa vijon për
src/scss/styles.scss
të importuar të gjithë burimin Sass të Bootstrap.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Ju gjithashtu mund të importoni fletët tona të stilit individualisht nëse dëshironi. Lexoni dokumentet tona të importit të Sass për detaje.
-
Më pas ngarkojmë CSS dhe importojmë JavaScript-in e Bootstrap. Shtoni sa vijon në
src/js/main.js
për të ngarkuar CSS dhe për të importuar të gjithë JS të Bootstrap. Popper do të importohet automatikisht përmes Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Ju gjithashtu mund të importoni shtojcat JavaScript individualisht sipas nevojës për të mbajtur madhësitë e paketave të ulëta:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Lexoni dokumentet tona JavaScript për më shumë informacion se si të përdorni shtojcat e Bootstrap.
-
Dhe ju keni mbaruar! 🎉 Me burimin Sass dhe JS të Bootstrap të ngarkuar plotësisht, serveri juaj lokal i zhvillimit tani duhet të duket kështu.
Tani mund të filloni të shtoni çdo komponent Bootstrap që dëshironi të përdorni. Sigurohuni që të shikoni projektin e plotë të shembullit të Webpack se si të përfshini Sass shtesë të personalizuar dhe të optimizoni ndërtimin tuaj duke importuar vetëm pjesët e CSS dhe JS të Bootstrap që ju nevojiten.
Optimizimi i prodhimit
Në varësi të konfigurimit tuaj, mund të dëshironi të zbatoni disa optimizime shtesë të sigurisë dhe shpejtësisë të dobishme për ekzekutimin e projektit në prodhim. Vini re se këto optimizime nuk aplikohen në projektin e shembullit të Webpack dhe janë në dorën tuaj për t'i zbatuar.
Ekstraktimi i CSS
Skedari style-loader
që konfiguruam më lart emeton me lehtësi CSS në paketë, në mënyrë që ngarkimi manual i një skedari CSS të dist/index.html
mos jetë i nevojshëm. Kjo qasje mund të mos funksionojë me një politikë strikte të sigurisë së përmbajtjes, megjithatë, dhe mund të bëhet një pengesë në aplikacionin tuaj për shkak të madhësisë së madhe të paketës.
Për të ndarë CSS në mënyrë që ta ngarkojmë drejtpërdrejt nga dist/index.html
, përdorni mini-css-extract-loader
shtojcën Webpack.
Së pari, instaloni shtojcën:
npm install --save-dev mini-css-extract-plugin
Pastaj instantohuni dhe përdorni shtojcën në konfigurimin e paketës së uebit:
--- 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
},
{
Pas ekzekutimit npm run build
përsëri, do të ketë një skedar të ri dist/main.css
, i cili do të përmbajë të gjithë CSS-në e importuar nga src/js/main.js
. Nëse shikoni dist/index.html
në shfletuesin tuaj tani, stili do të mungojë, siç është tani në dist/main.css
. Ju mund të përfshini CSS-në e krijuar dist/index.html
si kjo:
--- 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>
Ekstraktimi i skedarëve SVG
Bootstrap’s CSS includes multiple references to SVG files via inline data:
URIs. If you define a Content Security Policy for your project that blocks data:
URIs for images, then these SVG files will not load. You can get around this problem by extracting the inline SVG files using Webpack’s asset modules feature.
Configure Webpack to extract inline SVG files like this:
--- 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: [
After running npm run build
again, you’ll find the SVG files extracted into dist/icons
and properly referenced from CSS.
See something wrong or out of date here? Please open an issue on GitHub. Need help troubleshooting? Search or start a discussion on GitHub.