Bootstrap & Webpack nga Pag-ibig
Ti opisial a giya no kasano nga iraman ken bundle ti CSS ken JavaScript ti Bootstrap iti proyektom babaen ti Webpack.
Iyasmang
Mangbangbangonkami iti proyekto ti Webpack babaen ti Bootstrap manipud iti rugi, isu nga adda sumagmamano a kasapulan ken dagiti addang iti sango sakbay a talaga a makarugikami. Daytoy a giya ket kasapulan nga addaanka iti Node.js a naikabil ken sumagmamano a pannakaammo iti terminal.
-
Mangaramid ti project folder ken mangiset-up ti npm. Mangaramid tayo ti
my-project
folder ken initialize tayo ti npm nga addaan ti-y
argumento tapno maliklikan ti panagsaludsod na kadatayo amin nga interactive questions.mkdir my-project && cd my-project npm init -y
-
I-install ti Webpack. Sumaganad a kasapulantayo nga i-install dagiti panagpanpanunottayo iti panagrang-ay ti Webpack:
webpack
para iti kangrunaan ti Webpack,webpack-cli
tapno mabalintayo nga ipatarayen dagiti bilin ti Webpack manipud iti terminal, kenwebpack-dev-server
tapno mabalintayo nga ipatarayen ti lokal a serbidor ti panagdur-as. Usarenmi--save-dev
a mangipasimudaag a dagitoy a panagpanpanunot ket para laeng iti panagusar ti panagrang-ay ken saan a para iti produksion.npm i --save-dev webpack webpack-cli webpack-dev-server
-
I-install ti Bootstrap. Ita, mabalintayon nga i-install ti Bootstrap. I-install mi met ti Popper yantangay agpannuray dagiti dropdown, popover, ken tooltip mi iti dayta para iti positioning da. No dika plano nga usaren dagita a paset, mabalinmo a liklikan ti Popper ditoy.
npm i --save bootstrap @popperjs/core
-
Mangikabil kadagiti kanayonan a panagpannuray. Malaksid iti Webpack ken Bootstrap, kasapulantayo ti sumagmamano pay a panagpannuray tapno umno nga i-import ken mai-bundle ti CSS ken JS ti Bootstrap iti Webpack. Karaman kadagitoy ti Sass, dadduma a loader, ken Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Ita ta addaantayon kadagiti amin a kasapulan a panagpannuray a naikabil, mabalintayo ti makastrek iti trabaho a mangpartuat kadagiti file ti proyekto ken mangi-import ti Bootstrap.
Estruktura ti proyekto
Naaramidtayon ti my-project
folder ken nairugi ti npm. Ita, mangaramid tayo met kadagiti folder mi src
ken dist
tapno ma-round out ti project structure. Ipatarayen ti sumaganad manipud iti my-project
, wenno manual a mangpartuat ti folder ken estruktura ti papeles a naipakita iti baba.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
No nalpaskan, ti kompleto a proyektom ket rumbeng a kastoy ti langana:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
Iti daytoy a punto, amin ket adda iti umno a lugar, ngem saan nga agtrabaho ti Webpack gapu ta saanmi pay a napunno ti kadakami webpack.config.js
.
Ikonfigura ti Webpack
Iti dependencies a naikabil ken nakasaganan ti folder ti proyektomi para kadatayo a mangrugi iti panagkodigo, mabalintayo itan nga i-configure ti Webpack ken ipatarayen ti proyektotayo iti lokal.
-
Luktam
webpack.config.js
iti editormo. Gapu ta blangko, kasapulan nga inayon tayo ti sumagmamano a boilerplate config iti daytoy tapno mairugi tayo ti server tayo. Daytoy a paset ti config ket mangibaga ti Webpack ket agsapulda idi ti JavaScript ti proyektomi, no sadino ti pangiruaran ti naurnong a kodigo iti (dist
), ken no kasano ti rumbeng a panagtignay ti serbidor ti panagrang-ay (panagguyod manipud itidist
folder nga addaan iti napudot a panagkarga manen).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 } }
-
Sumaganad a punnuantayo ti
dist/index.html
. Daytoy ti panid ti HTML nga ikarga ti Webpack iti browser tapno mausar ti bundled a CSS ken JS nga inayontayo iti daytoy kadagiti naud-udi nga addang. Sakbay a maaramidtayo dayta, masapul nga ikkantayo iti maysa a banag a mai-render ken iramantayo tioutput
JS manipud iti napalabas nga addang.<!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>
Iramanmi ti bassit a Bootstrap styling ditoy nga addaan iti
div class="container"
ken<button>
tapno makitami no ti CSS ti Bootstrap ket maikarga babaen ti Webpack. -
Ita kasapulan tayo ti npm script tapno mapataray ti Webpack. Luktam
package.json
ken inayon tistart
iskrip a naipakita iti baba (rumbeng nga addaankayon iti iskrip ti pagsubok). Usarenmi daytoy nga iskrip tapno mangrugi ti lokal a Webpack dev servermi.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
Ket kamaudiananna, mabalintayo a rugian ti Webpack. Manipud iti
my-project
folder iti terminalmo, tarayen dayta baro a nainayon nga npm script:npm start
Iti sumaganad ken maudi a benneg iti daytoy a giya, ipasdekmi dagiti Webpack loader ken i-importmi amin a CSS ken JavaScript ti Bootstrap.
I-import ti Bootstrap
Ti panangi-import ti Bootstrap iti Webpack ket kasapulan dagiti loader nga in-installmi iti umuna a benneg. In-installmi dagitoy iti npm, ngem ita kasapulan a mai-configure ti Webpack tapno mausar dagitoy.
-
Ipasdek dagiti loader iti
webpack.config.js
. Nalpasen itan ti file ti panagisaadmo ken rumbeng a maipada iti snippet iti baba. Ti laeng baro a paset ditoy ket timodule
benneg.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' } ] } ] } }
Ania ti recap no apay a kasapulantayo amin dagitoy a loader.
style-loader
mangi-inject ti CSS iti maysa<style>
nga elemento iti ti<head>
panid ti HTML,css-loader
tumulong iti panagusar@import
kenurl()
,postcss-loader
ket kasapulan para iti Autoprefixer, kensass-loader
palubosannatayo nga agusar ti Sass. -
Ita, i-importtayo ti CSS ti Bootstrap. Inayon ti sumaganad iti tapno
src/scss/styles.scss
mai-import amin ti taudan ti Bootstrap a Sass.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Mabalinmo met nga i-import dagiti stylesheet-mi a saggaysa no kayatmo. Basaen dagiti Sass import docs mi para kadagiti detalye.
-
Sumaruno nga i-load tayo ti CSS ken i-import tayo ti JavaScript ti Bootstrap. Inayon ti sumaganad iti
src/js/main.js
tapno maikarga ti CSS ken i-import amin ti JS ti Bootstrap. Automatiko a mai-import ti Popper babaen ti Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Mabalinmo pay nga i-import dagiti plugin ti JavaScript a saggaysa no kasapulan tapno agtalinaed a nababbaba dagiti kadakkel ti bundle:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Basaen dagiti dok-mi ti JavaScript para iti ad-adu pay nga impormasion no kasano nga usaren dagiti plugin ti Bootstrap.
-
Ket nalpasmon! 🎉 Iti naan-anay a karga ti source ti Bootstrap a Sass ken JS, ti lokal a development server-mo ket rumbeng itan a kastoy ti langana.
Ita mabalinmon a rugian ti mangnayon iti aniaman a paset ti Bootstrap a kayatmo nga usaren. Siguraduen a kitaen ti kompleto a proyekto ti pagarigan ti Webpack no kasano nga iraman ti kanayonan a kostumbre a Sass ken mang-optimize ti panagbangonmo babaen ti panangi-import laeng kadagiti paset ti CSS ken JS ti Bootstrap a kasapulam.
Dagiti panagoptimisar ti produksion
Depende iti panagisaadmo, mabalinmo a kayat nga ipatungpal ti sumagmamano a kanayonan a panagpasayaat ti seguridad ken kapartak a makatulong para iti panagtaray ti proyekto iti produksion. Imutektekanyo a dagitoy a panagoptimisar ket saan a maipakat iti proyekto ti pagarigan ti Webpack ken adda kenka a mangipatungpal.
Panag-extract ti CSS
Ti style-loader
inkonfigurami iti ngato ket kombeniente a mangiruar ti CSS iti bundle tapno ti manual a panagkarga ti maysa a CSS a papeles iti dist/index.html
ket saan a kasapulan. Daytoy nga asitgan ket mabalin a saan nga agtrabaho iti nainget a Patakaran ti Seguridad ti Linaon, nupay kasta, ken mabalin nga agbalin a bottleneck iti aplikasionmo gapu ti dakkel a kadakkel ti bundle.
Tapno maisina ti CSS tapno direkta a maikargatayo daytoy manipud iti dist/index.html
, usaren ti mini-css-extract-loader
Webpack plugin.
Umuna, i-install ti plugin:
npm install --save-dev mini-css-extract-plugin
Kalpasanna, i-instantiate ken usaren ti plugin iti konfigurasion ti 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
},
{
Kalpasan ti panagtaray npm run build
manen, addanto ti baro a papeles dist/main.css
, a naglaonto amin ti CSS nga in-import babaen ti src/js/main.js
. No kitaem dist/index.html
iti browser-mo ita, awanto ti estilo, kas iti adda itan iti dist/main.css
. Mabalinmo nga iraman ti napataud a CSS iti dist/index.html
kastoy:
--- 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>
Panag-extract kadagiti SVG a file
Ti CSS ti Bootstrap ket mangiraman kadagiti adu a reperensia kadagiti SVG a papeles babaen dagiti inline nga data:
URI. No mangikeddengka ti Patakaran ti Seguridad ti Linaon para iti proyektom a manglapped kadagiti data:
URI para kadagiti ladawan, kalpasanna dagitoy a papeles ti SVG ket saan a maikarga. Mabalinmo a maliklikan daytoy a parikut babaen ti panangala kadagiti inline nga SVG a papeles babaen ti panagusar ti tampok dagiti modulo ti sanikua ti Webpack.
Ikonfigura ti Webpack tapno makaala kadagiti inline nga SVG a papeles a kas iti daytoy:
--- 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: [
Kalpasan ti panagtaray npm run build
manen, masarakamto dagiti SVG a papeles a naala iti dist/icons
ken umno a naireperensiaan manipud iti CSS.
Adda makitam a di umiso wenno saanen a napaut ditoy? Pangngaasi a luktan ti maysa nga isyu iti GitHub . Kasapulan kadi ti tulong iti panangrisut iti parikut? Agbirok wenno rugian ti diskusion iti GitHub.