Aqbeż għall-kontenut prinċipali Aqbeż għan-navigazzjoni tad-dokumenti
Check
in English

Bootstrap & Webpack

Il-gwida uffiċjali dwar kif tinkludi u tiġbor is-CSS u JavaScript ta' Bootstrap fil-proġett tiegħek billi tuża Webpack.

Trid taqbeż sal-aħħar? Niżżel il-kodiċi tas-sors u d-demo tax-xogħol għal din il-gwida mir- repożitorju twbs/eżempji . Tista 'wkoll tiftaħ l-eżempju fi StackBlitz għall-editjar dirett.

Setup

Qed nibnu proġett Webpack b'Bootstrap mill-bidu nett, għalhekk hemm xi prerekwiżiti u passi bil-quddiem qabel ma nkunu nistgħu verament nibdew. Din il-gwida teħtieġ li jkollok Node.js installat u xi familjarità mat-terminal.

  1. Oħloq folder tal-proġett u waqqaf npm. Aħna ser noħolqu l- my-projectfolder u inizjalizza npm bl- -yargument biex nevitaw li titlobna l-mistoqsijiet interattivi kollha.

    mkdir my-project && cd my-project
    npm init -y
    
  2. Installa Webpack. Sussegwentement irridu ninstallaw id-dipendenzi tal-iżvilupp tal-Webpack tagħna: webpackgħall-qalba tal-Webpack, webpack-clisabiex inkunu nistgħu nħaddmu l-kmandi tal-Webpack mit-terminal, u webpack-dev-servergħalhekk inkunu nistgħu nħaddmu server tal-iżvilupp lokali. Aħna nużaw --save-devbiex nagħtu sinjal li dawn id-dipendenzi huma biss għall-użu tal-iżvilupp u mhux għall-produzzjoni.

    npm i --save-dev webpack webpack-cli webpack-dev-server
    
  3. Installa Bootstrap. Issa nistgħu ninstallaw Bootstrap. Aħna ser ninstallaw ukoll Popper peress li l-dropdowns, popovers, u tooltips tagħna jiddependu minnu għall-pożizzjonament tagħhom. Jekk ma tippjanax li tuża dawk il-komponenti, tista' tħalli barra Popper hawn.

    npm i --save bootstrap @popperjs/core
    
  4. Installa dipendenzi addizzjonali. Minbarra l-Webpack u l-Bootstrap, neħtieġu xi ftit aktar dipendenzi biex nimportaw u ngħaqqdu kif suppost is-CSS u JS ta' Bootstrap ma' Webpack. Dawn jinkludu Sass, xi loaders, u Autoprefixer.

    npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
    

Issa li għandna d-dipendenzi kollha meħtieġa installati, nistgħu nibdew naħdmu biex noħolqu l-fajls tal-proġett u jimportaw Bootstrap.

Struttura tal-proġett

Diġà ħloqna l- my-projectfolder u inizjalizzajna npm. Issa aħna ser noħolqu wkoll tagħna srcu distfolders biex ittejjeb l-istruttura tal-proġett. Mexxi dan li ġej minn my-project, jew oħloq manwalment il-folder u l-istruttura tal-fajl murija hawn taħt.

mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js

Meta tkun lest, il-proġett sħiħ tiegħek għandu jidher bħal dan:

my-project/
├── dist/
│   └── index.html
├── src/
│   ├── js/
│   │   └── main.js
│   └── scss/
│       └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js

F'dan il-punt, kollox jinsab fil-post it-tajjeb, iżda l-Webpack mhux se jaħdem għax għadna ma imlieniex tagħna webpack.config.js.

Ikkonfigura Webpack

Bid-dipendenzi installati u l-folder tal-proġett tagħna lest biex nibdew nikkodifikaw, issa nistgħu kkonfiguraw Webpack u nmexxu l-proġett tagħna lokalment.

  1. Iftaħ webpack.config.jsfl-editur tiegħek. Peress li huwa vojt, ikollna bżonn inżidu xi konfigurazzjoni tal-boilerplate magħha sabiex inkunu nistgħu nibdew is-server tagħna. Din il-parti tal-konfigurazzjoni tgħid lill-Webpack kellhom ifittxu l-JavaScript tal-proġett tagħna, fejn joħroġ il-kodiċi kkumpilat għal ( dist), u kif is-server tal-iżvilupp għandu jġib ruħu (ġbid mill- distfolder b'reload sħun).

    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. Imbagħad nimlew tagħna dist/index.html. Din hija l-paġna HTML Webpack se tagħbija fil-browser biex tutilizza s-CSS u JS miġbura li aħna ser inżidu magħha f'passi aktar tard. Qabel ma nistgħu nagħmlu dan, irridu nagħtuha xi ħaġa biex tirrendi u tinkludi l- outputJS mill-pass preċedenti.

    <!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>
    

    Aħna qed nkludu ftit ta 'grafika Bootstrap hawn mal- div class="container"u <button>sabiex naraw meta CSS Bootstrap hija mgħobbija minn Webpack.

  3. Issa neħtieġu script npm biex inħaddmu Webpack. Iftaħ package.jsonu żid l- startiskrittura murija hawn taħt (diġà għandu jkollok l-iskrittura tat-test). Aħna ser nużaw dan l-iskrittura biex nibdew is-server lokali tagħna ta 'dev Webpack.

    {
      // ...
      "scripts": {
        "start": "webpack serve --mode development",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      // ...
    }
    
  4. U finalment, nistgħu nibdew Webpack. Mill- my-projectfolder fit-terminal tiegħek, mexxi dak l-iskript npm miżjud ġdid:

    npm start
    
    Webpack dev server qed jaħdem

Fit-taqsima li jmiss u l-aħħar għal din il-gwida, aħna ser inwaqqfu l-loaders tal-Webpack u nimportaw is-CSS u l-JavaScript ta' Bootstrap kollha.

Importa Bootstrap

L-importazzjoni ta 'Bootstrap f'Webpack teħtieġ il-loaders li installajna fl-ewwel taqsima. Installajnahom b'npm, iżda issa Webpack jeħtieġ li jiġi kkonfigurat biex jużahom.

  1. Waħħal il-loaders fi webpack.config.js. Il-fajl tal-konfigurazzjoni tiegħek issa huwa komplut u għandu jaqbel mas-snippet hawn taħt. L-unika parti ġdida hawnhekk hija t- moduletaqsima.

    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'
              }
            ]
          }
        ]
      }
    }
    

    Hawn sommarju ta’ għaliex għandna bżonn dawn il-loaders kollha. style-loaderjinjetta s-CSS <style>f'element fil- <head>paġna HTML, css-loaderjgħin fl-użu @importu url(), postcss-loaderhuwa meħtieġ għall-Autoprefixer, u sass-loaderjippermettilna nużaw Sass.

  2. Issa, ejja importazzjoni CSS Bootstrap. Żid dan li ġej biex src/scss/styles.scsstimporta s-sors kollu ta' Bootstrap Sass.

    // Import all of Bootstrap's CSS
    @import "~bootstrap/scss/bootstrap";
    

    Tista 'wkoll timporta l-stylesheets tagħna individwalment jekk trid. Aqra d-doks ta' importazzjoni ta' Sass tagħna għad-dettalji.

  3. Sussegwentement aħna tagħbija l-CSS u l-importazzjoni Bootstrap's JavaScript. Żid dan li ġej biex src/js/main.jstgħabbi s-CSS u timporta l-JS kollha ta' Bootstrap. Popper se jiġi importat awtomatikament permezz tal-Bootstrap.

    // Import our custom CSS
    import '../scss/styles.scss'
    
    // Import all of Bootstrap's JS
    import * as bootstrap from 'bootstrap'
    

    Tista 'wkoll timporta plugins JavaScript individwalment kif meħtieġ biex iżżomm id-daqsijiet tal-pakketti baxxi:

    import Alert from 'bootstrap/js/dist/alert'
    
    // or, specify which plugins you need:
    import { Tooltip, Toast, Popover } from 'bootstrap'
    

    Aqra d-dokumenti JavaScript tagħna għal aktar informazzjoni dwar kif tuża l-plugins ta’ Bootstrap.

  4. U lest! 🎉 Bis-sors tal-Bootstrap Sass u JS mgħobbija bis-sħiħ, is-server tal-iżvilupp lokali tiegħek issa għandu jidher bħal dan.

    Webpack dev server li jaħdem bil-Bootstrap

    Issa tista 'tibda żżid kwalunkwe komponenti Bootstrap li trid tuża. Kun żgur li tiċċekkja l-proġett komplut ta 'eżempju Webpack għal kif tinkludi Sass personalizzat addizzjonali u ottimizza l-bini tiegħek billi timporta biss il-partijiet tas-CSS u JS ta' Bootstrap li għandek bżonn.

Ottimizzazzjonijiet tal-produzzjoni

Skont is-setup tiegħek, tista 'tkun trid timplimenta xi ottimizzazzjonijiet addizzjonali ta' sigurtà u veloċità utli għat-tmexxija tal-proġett fil-produzzjoni. Innota li dawn l-ottimizzazzjonijiet mhumiex applikati fuq il-proġett eżempju Webpack u huma f'idejk li timplimenta.

Estrazzjoni CSS

L- style-loaderikkonfigurat hawn fuq jitfa' b'mod konvenjenti CSS fil-pakkett sabiex it-tagħbija manwalment ta' fajl CSS dist/index.htmlma tkunx meħtieġa. Dan l-approċċ jista' ma jaħdimx b'Politika ta' Sigurtà tal-Kontenut stretta, madankollu, u jista' jsir ostakolu fl-applikazzjoni tiegħek minħabba d-daqs kbir tal-pakkett.

Biex tissepara s-CSS sabiex inkunu nistgħu tagħbijaha direttament minn dist/index.html, uża l- mini-css-extract-loaderplugin Webpack.

L-ewwel, installa l-plugin:

npm install --save-dev mini-css-extract-plugin

Imbagħad istanzija u uża l-plugin fil-konfigurazzjoni tal-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
           },
           {

Wara li terġa' taħdem npm run build, se jkun hemm fajl ġdid dist/main.css, li jkun fih is-CSS kollha importati minn src/js/main.js. Jekk tara dist/index.htmlfil-browser tiegħek issa, l-istil se jkun nieqes, kif inhu issa fil- dist/main.css. Tista' tinkludi s-CSS iġġenerat dist/index.htmlbħal dan:

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

Estrazzjoni ta' fajls SVG

Is-CSS ta' Bootstrap jinkludi referenzi multipli għal fajls SVG permezz ta' data:URIs inline. Jekk tiddefinixxi Politika tas-Sigurtà tal-Kontenut għall-proġett tiegħek li timblokka l- data:URIs għall-immaġini, allura dawn il-fajls SVG ma jitgħabbewx. Tista' tevita din il-problema billi tiġbed il-fajls SVG inline billi tuża l-karatteristika tal-moduli tal-assi ta' Webpack.

Ikkonfigura Webpack biex tiġbed fajls SVG inline bħal dan:

--- 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: [

Wara li terġa' taħdem npm run build, issib il-fajls SVG estratti dist/iconsu referenzjati sew minn CSS.


Ara xi ħaġa ħażina jew skaduta hawn? Jekk jogħġbok iftaħ kwistjoni fuq GitHub . Għandek bżonn għajnuna biex issolvi l-problemi? Fittex jew ibda diskussjoni fuq GitHub.