Laktawan ti kangrunaan a linaon Laktawan ti docs navigation
Check
in English

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.

Kayatmo kadi ti aglaktaw agingga iti ngudo? I-download ti taudan a kodigo ken ti agtartrabaho a demo para iti daytoy a giya manipud iti pagidulinan ti twbs/examples . Mabalinmo pay a luktan ti pagarigan iti StackBlitz para iti live a panag-edit.

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.

  1. Mangaramid ti project folder ken mangiset-up ti npm. Mangaramid tayo ti my-projectfolder ken initialize tayo ti npm nga addaan ti -yargumento tapno maliklikan ti panagsaludsod na kadatayo amin nga interactive questions.

    mkdir my-project && cd my-project
    npm init -y
    
  2. I-install ti Webpack. Sumaganad a kasapulantayo nga i-install dagiti panagpanpanunottayo iti panagrang-ay ti Webpack: webpackpara iti kangrunaan ti Webpack, webpack-clitapno mabalintayo nga ipatarayen dagiti bilin ti Webpack manipud iti terminal, ken webpack-dev-servertapno mabalintayo nga ipatarayen ti lokal a serbidor ti panagdur-as. Usarenmi --save-deva 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
    
  3. 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
    
  4. 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-projectfolder ken nairugi ti npm. Ita, mangaramid tayo met kadagiti folder mi srcken disttapno 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.

  1. Luktam webpack.config.jsiti 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 iti distfolder 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
      }
    }
    
  2. 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 ti outputJS 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.

  3. Ita kasapulan tayo ti npm script tapno mapataray ti Webpack. Luktam package.jsonken inayon ti startiskrip 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"
      },
      // ...
    }
    
  4. Ket kamaudiananna, mabalintayo a rugian ti Webpack. Manipud iti my-projectfolder iti terminalmo, tarayen dayta baro a nainayon nga npm script:

    npm start
    
    Webpack dev serbidor nga agtartaray

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.

  1. 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 ti modulebenneg.

    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-loadermangi-inject ti CSS iti maysa <style>nga elemento iti ti <head>panid ti HTML, css-loadertumulong iti panagusar @importken url(), postcss-loaderket kasapulan para iti Autoprefixer, ken sass-loaderpalubosannatayo nga agusar ti Sass.

  2. Ita, i-importtayo ti CSS ti Bootstrap. Inayon ti sumaganad iti tapno src/scss/styles.scssmai-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.

  3. Sumaruno nga i-load tayo ti CSS ken i-import tayo ti JavaScript ti Bootstrap. Inayon ti sumaganad iti src/js/main.jstapno 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.

  4. 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.

    Webpack dev server nga agtartaray babaen ti Bootstrap

    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-loaderinkonfigurami iti ngato ket kombeniente a mangiruar ti CSS iti bundle tapno ti manual a panagkarga ti maysa a CSS a papeles iti dist/index.htmlket 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-loaderWebpack 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 buildmanen, 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.htmliti browser-mo ita, awanto ti estilo, kas iti adda itan iti dist/main.css. Mabalinmo nga iraman ti napataud a CSS iti dist/index.htmlkastoy:

--- 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 buildmanen, masarakamto dagiti SVG a papeles a naala iti dist/iconsken 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.