Bootstrap & Webpack
Oficiální průvodce, jak zahrnout a sbalit CSS a JavaScript Bootstrapu do vašeho projektu pomocí Webpacku.
Založit
Vytváříme projekt Webpack s Bootstrap od nuly, takže před tím, než můžeme skutečně začít, existují určité předpoklady a kroky. Tato příručka vyžaduje, abyste měli nainstalovaný Node.js a určitou znalost terminálu.
-
Vytvořte složku projektu a nastavte npm. Vytvoříme
my-project
složku a inicializujeme npm s-y
argumentem, aby nám nekladl všechny interaktivní otázky.mkdir my-project && cd my-project npm init -y
-
Nainstalujte Webpack. Dále musíme nainstalovat naše vývojové závislosti Webpacku:
webpack
pro jádro Webpacku,webpack-cli
abychom mohli spouštět příkazy Webpacku z terminálu awebpack-dev-server
abychom mohli spouštět místní vývojový server. Používáme--save-dev
k signalizaci, že tyto závislosti jsou pouze pro vývojové použití a ne pro výrobu.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Nainstalujte Bootstrap. Nyní můžeme nainstalovat Bootstrap. Nainstalujeme také Popper, protože na něm závisí umístění našich rozevíracích seznamů, vyskakovacích oken a popisků. Pokud tyto komponenty neplánujete používat, můžete zde Popper vynechat.
npm i --save bootstrap @popperjs/core
-
Nainstalujte další závislosti. Kromě Webpacku a Bootstrapu potřebujeme několik dalších závislostí, abychom správně importovali a sbalili CSS a JS Bootstrapu s Webpackem. Patří mezi ně Sass, některé zavaděče a Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Nyní, když máme nainstalované všechny potřebné závislosti, můžeme se pustit do vytváření souborů projektu a importu Bootstrapu.
Struktura projektu
Již jsme vytvořili my-project
složku a inicializovali npm. Nyní také vytvoříme složky src
a dist
pro doplnění struktury projektu. Spusťte následující z my-project
, nebo ručně vytvořte strukturu složek a souborů zobrazenou níže.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Až budete hotovi, váš kompletní projekt by měl vypadat takto:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
V tuto chvíli je vše na správném místě, ale Webpack nebude fungovat, protože jsme ještě nevyplnili naše webpack.config.js
.
Nakonfigurujte webový balíček
S nainstalovanými závislostmi a naší projektovou složkou připravenou k zahájení kódování můžeme nyní nakonfigurovat Webpack a spustit náš projekt lokálně.
-
Otevřete
webpack.config.js
v editoru. Protože je prázdný, budeme do něj muset přidat nějakou standardní konfiguraci, abychom mohli spustit náš server. Tato část konfigurace říká Webpacku, aby hledal JavaScript našeho projektu, kam vyvést zkompilovaný kód do (dist
) a jak se má chovat vývojový server (stahování zedist
složky s hot reload).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 } }
-
Dále vyplníme naše
dist/index.html
. Toto je stránka HTML, kterou Webpack načte do prohlížeče, aby využil přibalené CSS a JS, které k ní přidáme v pozdějších krocích. Než to uděláme, musíme mu dát něco k vykreslení a zahrnoutoutput
JS z předchozího kroku.<!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>
Zahrnuli jsme sem trochu stylů Bootstrapu s
div class="container"
a<button>
, abychom viděli, kdy je CSS Bootstrapu načteno Webpackem. -
Nyní potřebujeme skript npm ke spuštění Webpacku. Otevřete
package.json
a přidejtestart
skript zobrazený níže (měli byste již mít testovací skript). Tento skript použijeme ke spuštění našeho místního dev serveru Webpack.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
A konečně můžeme spustit Webpack. Ze
my-project
složky v terminálu spusťte nově přidaný skript npm:npm start
V další a poslední části této příručky nastavíme zavaděče Webpack a importujeme všechny CSS a JavaScript Bootstrapu.
Importujte Bootstrap
Import Bootstrapu do Webpacku vyžaduje zavaděče, které jsme nainstalovali v první sekci. Nainstalovali jsme je pomocí npm, ale nyní je třeba nakonfigurovat Webpack, aby je používal.
-
Nastavte nakladače v
webpack.config.js
. Váš konfigurační soubor je nyní kompletní a měl by odpovídat úryvku níže. Jedinou novou částí je zdemodule
sekce.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' } ] } ] } }
Zde je rekapitulace toho, proč potřebujeme všechny tyto nakladače.
style-loader
vkládá CSS do<style>
prvku na<head>
stránce HTML,css-loader
pomáhá s používáním@import
aurl()
,postcss-loader
je vyžadováno pro Autoprefixer asass-loader
umožňuje nám používat Sass. -
Nyní importujme CSS Bootstrapu.
src/scss/styles.scss
Chcete -li importovat všechny zdrojové Sass Bootstrapu, přidejte následující .// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Pokud chcete, můžete také importovat naše šablony stylů jednotlivě. Podrobnosti najdete v našich dokumentech k importu Sass .
-
Dále načteme CSS a importujeme JavaScript Bootstrapu.
src/js/main.js
Chcete -li načíst CSS a importovat všechny JS Bootstrapu, přidejte následující . Popper bude automaticky importován přes Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Zásuvné moduly JavaScript můžete také importovat jednotlivě podle potřeby, abyste snížili velikost balíků:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Přečtěte si naše dokumenty JavaScript pro více informací o tom, jak používat pluginy Bootstrap.
-
A máte hotovo! 🎉 S plně načteným zdrojovým kódem Sass a JS Bootstrapu by váš místní vývojový server měl nyní vypadat takto.
Nyní můžete začít přidávat jakékoli komponenty Bootstrap, které chcete použít. Nezapomeňte se podívat na kompletní ukázkový projekt Webpack, kde najdete, jak zahrnout další vlastní Sass a optimalizovat své sestavení importováním pouze částí CSS a JS Bootstrapu, které potřebujete.
Optimalizace výroby
V závislosti na vašem nastavení možná budete chtít implementovat některé další optimalizace zabezpečení a rychlosti užitečné pro spuštění projektu v produkci. Všimněte si, že tyto optimalizace nejsou aplikovány na ukázkový projekt Webpack a je na vás, abyste je implementovali.
Extrahování CSS
Výše nakonfigurovaná funkce pohodlně vysílá CSS do balíčku, takže není nutné style-loader
ruční načítání souboru CSS . dist/index.html
Tento přístup však nemusí fungovat s přísnými zásadami zabezpečení obsahu a může se stát překážkou ve vaší aplikaci kvůli velké velikosti balíčku.
K oddělení CSS, abychom je mohli načíst přímo z dist/index.html
, použijte mini-css-extract-loader
plugin Webpack.
Nejprve nainstalujte plugin:
npm install --save-dev mini-css-extract-plugin
Poté vytvořte instanci a použijte plugin v konfiguraci 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
},
{
Po opětovném spuštění npm run build
bude nový soubor dist/main.css
, který bude obsahovat všechny CSS importované pomocí src/js/main.js
. Pokud nyní prohlížíte dist/index.html
ve svém prohlížeči, styl bude chybět, protože je nyní v dist/main.css
. Vygenerovaný CSS můžete zahrnout dist/index.html
takto:
--- 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>
Extrahování souborů SVG
CSS Bootstrapu obsahuje více odkazů na soubory SVG prostřednictvím vložených data:
URI. Pokud pro svůj projekt definujete zásady zabezpečení obsahu, které blokují data:
identifikátory URI pro obrázky, tyto soubory SVG se nenačtou. Tento problém můžete obejít extrahováním vložených souborů SVG pomocí funkce modulů aktiv Webpack.
Nakonfigurujte Webpack pro extrahování vložených souborů SVG takto:
--- 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: [
Po npm run build
opětovném spuštění najdete soubory SVG extrahované do dist/icons
CSS a správně na ně odkazované.
Vidíte zde něco špatného nebo zastaralého? Otevřete problém na GitHubu . Potřebujete pomoc s odstraňováním problémů? Vyhledejte nebo zahajte diskusi na GitHubu.