Prijeđi na glavni sadržaj Prijeđi na navigaciju dokumentima
Check
in English

Bootstrap & Webpack

Službeni vodič za uključivanje i spajanje Bootstrapovog CSS-a i JavaScripta u vaš projekt pomoću Webpacka.

Želite li preskočiti na kraj? Preuzmite izvorni kod i radni demo za ovaj vodič iz repozitorija twbs/examples . Također možete otvoriti primjer u StackBlitzu za uređivanje uživo.

Postaviti

Gradimo projekt Webpacka s Bootstrapom od nule, tako da postoje neki preduvjeti i početni koraci prije nego što stvarno počnemo. Ovaj vodič zahtijeva da imate instaliran Node.js i određeno poznavanje terminala.

  1. Stvorite mapu projekta i postavite npm. Stvorit ćemo my-projectmapu i inicijalizirati npm s -yargumentom kako bismo izbjegli da nam postavlja sva interaktivna pitanja.

    mkdir my-project && cd my-project
    npm init -y
    
  2. Instalirajte Webpack. Zatim moramo instalirati naše razvojne ovisnosti Webpacka: webpackza jezgru Webpacka, webpack-clitako da možemo pokrenuti naredbe Webpacka s terminala, i webpack-dev-servertako možemo pokrenuti lokalni razvojni poslužitelj. Koristimo --save-devkako bismo signalizirali da su ove ovisnosti samo za razvojnu upotrebu, a ne za proizvodnju.

    npm i --save-dev webpack webpack-cli webpack-dev-server
    
  3. Instalirajte Bootstrap. Sada možemo instalirati Bootstrap. Također ćemo instalirati Popper jer naši padajući izbornici, skočni prozori i opisi alata ovise o njemu za njihovo pozicioniranje. Ako ne planirate koristiti te komponente, ovdje možete izostaviti Popper.

    npm i --save bootstrap @popperjs/core
    
  4. Instalirajte dodatne ovisnosti. Uz Webpack i Bootstrap, potrebno nam je još nekoliko ovisnosti kako bismo ispravno uvezli i povezali Bootstrapov CSS i JS s Webpackom. To uključuje Sass, neke učitavače i Autoprefixer.

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

Sada kada imamo instalirane sve potrebne ovisnosti, možemo krenuti s radom na izradi projektnih datoteka i uvozu Bootstrapa.

Struktura projekta

Već smo stvorili my-projectmapu i inicijalizirali npm. Sada ćemo također stvoriti mape srci distkako bismo zaokružili strukturu projekta. Pokrenite sljedeće iz my-projectili ručno stvorite mapu i strukturu datoteke prikazanu u nastavku.

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

Kada završite, vaš kompletan projekt trebao bi izgledati ovako:

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

U ovom trenutku sve je na pravom mjestu, ali Webpack neće raditi jer još nismo ispunili naš webpack.config.js.

Konfigurirajte Webpack

S instaliranim ovisnostima i mapom našeg projekta spremnom za početak kodiranja, sada možemo konfigurirati Webpack i pokrenuti naš projekt lokalno.

  1. Otvorite webpack.config.jsu uređivaču. Budući da je prazan, morat ćemo mu dodati neku standardnu ​​konfiguraciju kako bismo mogli pokrenuti naš poslužitelj. Ovaj dio konfiguracije govori Webpacku da potraži JavaScript našeg projekta, gdje ispisati kompajlirani kod ( dist) i kako bi se razvojni poslužitelj trebao ponašati (povlačenje iz distmape s vrućim ponovnim učitavanjem).

    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. Zatim ispunjavamo naš dist/index.html. Ovo je HTML stranica koju će Webpack učitati u preglednik kako bi iskoristio CSS i JS u paketu koje ćemo joj dodati u kasnijim koracima. Prije nego što to možemo učiniti, moramo mu dati nešto za renderiranje i uključiti outputJS iz prethodnog koraka.

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

    Ovdje uključujemo malo Bootstrapovog stila s div class="container"i <button>kako bismo vidjeli kada Webpack učitava Bootstrapov CSS.

  3. Sada nam treba npm skripta za pokretanje Webpacka. Otvorite package.jsoni dodajte startskriptu prikazanu u nastavku (trebali biste već imati testnu skriptu). Koristit ćemo ovu skriptu za pokretanje našeg lokalnog Webpack dev poslužitelja.

    {
      // ...
      "scripts": {
        "start": "webpack serve --mode development",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      // ...
    }
    
  4. I konačno, možemo pokrenuti Webpack. Iz my-projectmape na vašem terminalu pokrenite tu novododanu npm skriptu:

    npm start
    
    Webpack dev poslužitelj radi

U sljedećem i posljednjem odjeljku ovog vodiča, postavit ćemo učitavače Webpacka i uvesti sav Bootstrapov CSS i JavaScript.

Uvezi Bootstrap

Uvoz Bootstrapa u Webpack zahtijeva učitavače koje smo instalirali u prvom odjeljku. Instalirali smo ih s npm-om, ali sada Webpack treba biti konfiguriran za njihovu upotrebu.

  1. Postavite utovarivače u webpack.config.js. Vaša je konfiguracijska datoteka sada dovršena i trebala bi odgovarati isječku ispod. Jedini novi dio ovdje je moduleodjeljak.

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

    Evo rezimea zašto su nam potrebni svi ti utovarivači. style-loaderubacuje CSS u <style>element na <head>HTML stranici, css-loaderpomaže u korištenju @importi url(), postcss-loaderpotreban je za Autoprefixer i sass-loaderomogućuje nam upotrebu Sass-a.

  2. Sada uvezimo Bootstrapov CSS. Dodajte sljedeće za src/scss/styles.scssuvoz svih Bootstrapovih izvora Sass.

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

    Također možete pojedinačno uvesti naše tablice stilova ako želite. Za pojedinosti pročitajte naše Sass uvozne dokumente .

  3. Zatim učitavamo CSS i uvozimo Bootstrapov JavaScript. Dodajte sljedeće za src/js/main.jsučitavanje CSS-a i uvoz svih Bootstrapovih JS-ova. Popper će se automatski uvesti putem Bootstrapa.

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

    Također možete pojedinačno uvesti JavaScript dodatke prema potrebi kako biste smanjili veličinu paketa:

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

    Pročitajte naše JavaScript dokumente za više informacija o tome kako koristiti Bootstrapove dodatke.

  4. I gotovi ste! 🎉 S punim učitavanjem Bootstrapovog izvornog koda Sass i JS, vaš bi lokalni razvojni poslužitelj sada trebao izgledati ovako.

    Webpack dev server radi s Bootstrapom

    Sada možete početi dodavati sve Bootstrap komponente koje želite koristiti. Obavezno provjerite cijeli projekt primjera Webpacka kako uključiti dodatni prilagođeni Sass i optimizirati svoju izgradnju uvozom samo dijelova Bootstrapovog CSS-a i JS-a koji su vam potrebni.

Optimizacije proizvodnje

Ovisno o vašim postavkama, možda ćete htjeti implementirati neke dodatne optimizacije sigurnosti i brzine korisne za pokretanje projekta u proizvodnji. Imajte na umu da se ove optimizacije ne primjenjuju na projekt primjera Webpacka i na vama je da ih implementirate.

Izdvajanje CSS-a

Gore style-loaderkonfigurirani prikladno emitira CSS u paket tako da ručno učitavanje CSS datoteke dist/index.htmlnije potrebno. Međutim, ovaj pristup možda neće funkcionirati uz strogu politiku sigurnosti sadržaja i može postati usko grlo u vašoj aplikaciji zbog velike veličine paketa.

Za odvajanje CSS-a kako bismo ga mogli učitati izravno iz dist/index.html, upotrijebite mini-css-extract-loaderdodatak Webpack.

Najprije instalirajte dodatak:

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

Zatim instancirajte i upotrijebite dodatak u konfiguraciji Webpacka:

--- 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
           },
           {

Nakon npm run buildponovnog pokretanja, pojavit će se nova datoteka dist/main.csskoja će sadržavati sav CSS uvezen od strane src/js/main.js. Ako sada pogledate dist/index.htmlu svom pregledniku, stil će nedostajati, kao što je sada u dist/main.css. Generirani CSS možete uključiti dist/index.htmlovako:

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

Izdvajanje SVG datoteka

Bootstrapov CSS uključuje višestruke reference na SVG datoteke putem ugrađenih data:URI-ja. Ako za svoj projekt definirate Pravila sigurnosti sadržaja koja blokiraju data:URI-je za slike, te se SVG datoteke neće učitati. Ovaj problem možete zaobići ekstrahiranjem ugrađenih SVG datoteka pomoću Webpackove značajke modula imovine.

Konfigurirajte Webpack za izdvajanje ugrađenih SVG datoteka ovako:

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

Nakon npm run buildponovnog pokretanja, pronaći ćete SVG datoteke ekstrahirane u dist/iconsCSS i pravilno referencirane iz njega.


Ovdje vidite nešto pogrešno ili zastarjelo? Otvorite problem na GitHubu . Trebate li pomoć u rješavanju problema? Pretražite ili započnite raspravu na GitHubu.