Ugrás a fő tartalomhoz Ugrás a dokumentumok navigációjához
Check
in English

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.

A végére szeretne ugrani? Töltse le az útmutató forráskódját és működő bemutatóját a twbs/examples tárból . A példát a StackBlitzben is megnyithatja élő szerkesztéshez.

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.

  1. Hozzon létre egy projektmappát, és állítsa be az npm-et. Létrehozzuk a my-projectmappát, és inicializáljuk az npm-et az -yargumentummal, hogy elkerüljük, hogy minden interaktív kérdést tegyen fel nekünk.

    mkdir my-project && cd my-project
    npm init -y
    
  2. Telepítse a Webpack-et. Ezután telepítenünk kell a Webpack fejlesztői függőségeinket: webpacka Webpack magjához, webpack-clihogy a terminálról Webpack parancsokat tudjunk futtatni, és webpack-dev-serverígy egy helyi fejlesztőszervert tudjunk futtatni. Azt szoktuk --save-devjelezni, 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
    
  3. 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
    
  4. 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-projectmappát és inicializáltuk az npm-et. Most létrehozzuk a mi srcés distmappá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.

  1. Nyissa webpack.config.jsmeg 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 ( disthot 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
      }
    }
    
  2. 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 kell outputfoglalnunk 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.

  3. Most szükségünk van egy npm szkriptre a Webpack futtatásához. Nyissa meg package.jsonés adja hozzá az startalá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"
      },
      // ...
    }
    
  4. És végül elindíthatjuk a Webpack-et. A my-projectterminál mappájából futtassa az újonnan hozzáadott npm szkriptet:

    npm start
    
    Webpack fejlesztői szerver fut

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.

  1. Á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 a moduleszakasz.

    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-loaderbeilleszti 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@importurl()postcss-loadersass-loader

  2. Most importáljuk a Bootstrap CSS-jét. Adja hozzá a következőt src/scss/styles.scssa 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 .

  3. Ezután betöltjük a CSS-t, és importáljuk a Bootstrap JavaScriptjét. src/js/main.jsA 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.

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

    Webpack fejlesztői szerver, amely a Bootstrap segítségével fut

    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-loadermanuálisan betölteni egy CSS-fájlt . dist/index.htmlElő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.htmlhaszná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 buildegy új fájl dist/main.cssfog megjelenni, amely tartalmazza a által importált összes CSS-t src/js/main.js. Ha most megtekinti dist/index.htmla 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 buildmegtalálja az SVG-fájlokat dist/iconsa 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.