Bootstrap & Webpack
Официјален водич за тоа како да ги вклучите и пакетите CSS и JavaScript на Bootstrap во вашиот проект користејќи Webpack.
Поставување
Градиме проект Webpack со Bootstrap од нула, така што има некои предуслови и чекори пред навистина да започнеме. Овој водич бара од вас да имате инсталирано Node.js и блискост со терминалот.
-
Направете проектна папка и поставете npm. Ќе ја создадеме
my-project
папката и ќе го иницијализираме npm со-y
аргументот за да избегнеме да ни ги поставува сите интерактивни прашања.mkdir my-project && cd my-project npm init -y
-
Инсталирајте Webpack. Следно, треба да ги инсталираме нашите развојни зависности на Webpack:
webpack
за јадрото на Webpack,webpack-cli
за да можеме да ги извршуваме командите на Webpack од терминалот иwebpack-dev-server
за да можеме да работиме локален сервер за развој. Ние користиме--save-dev
за да сигнализираме дека овие зависности се само за развојна употреба, а не за производство.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Инсталирајте Bootstrap. Сега можеме да инсталираме Bootstrap. Ќе го инсталираме и Popper бидејќи нашите спуштања, поповери и совети за алатки зависат од него за нивното позиционирање. Ако не планирате да ги користите тие компоненти, можете да го испуштите Popper овде.
npm i --save bootstrap @popperjs/core
-
Инсталирајте дополнителни зависности. Покрај Webpack и Bootstrap, потребни ни се уште неколку зависности за правилно увезување и комплетирање на CSS и JS на Bootstrap со Webpack. Тие вклучуваат Sass, некои натоварувачи и Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Сега кога ги имаме инсталирано сите потребни зависности, можеме да почнеме да работиме со креирање на проектните датотеки и увоз на Bootstrap.
Структура на проектот
Веќе ја создадовме my-project
папката и иницијализиравме npm. Сега ќе ги креираме и нашите src
и dist
папки за да ја заокружиме структурата на проектот. Извршете го следново од my-project
или рачно креирајте ја структурата на папката и датотеката прикажани подолу.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Кога ќе завршите, вашиот целосен проект треба да изгледа вака:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
Во овој момент, сè е на вистинското место, но Webpack нема да работи бидејќи сè уште не сме го пополниле нашиот webpack.config.js
.
Конфигурирајте го Webpack
Со инсталирани зависности и со нашата проектна папка подготвена за да започнеме со кодирање, сега можеме да го конфигурираме Webpack и да го извршиме нашиот проект локално.
-
Отворете
webpack.config.js
во вашиот уредник. Бидејќи е празно, ќе треба да додадеме одредена конфигурација на котелската плоча за да можеме да го стартуваме нашиот сервер. Овој дел од конфигурацијата му кажува на Webpack да го бара JavaScript-от на нашиот проект, каде да го извади компајлираниот код на (dist
) и како треба да се однесува серверот за развој (извлекување одdist
папката со жешко повторно вчитување).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 } }
-
Следно го пополнуваме нашиот
dist/index.html
. Ова е HTML-страницата Webpack што ќе ја вчита во прелистувачот за да ги користи комплетните CSS и JS што ќе ги додадеме во подоцнежните чекори. Пред да го направиме тоа, треба да му дадеме нешто за рендерирање и да го вклучимеoutput
JS од претходниот чекор.<!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>
Вклучуваме малку стил на Bootstrap овде со
div class="container"
и<button>
за да видиме кога CSS на Bootstrap ќе се вчита од Webpack. -
Сега ни треба скрипта npm за да го извршиме Webpack. Отворете
package.json
и додајте јаstart
скриптата прикажана подолу (веќе треба да ја имате скриптата за тестирање). Ќе ја користиме оваа скрипта за да го стартуваме нашиот локален сервер за развој на Webpack.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
И конечно, можеме да започнеме Webpack. Од
my-project
папката во вашиот терминал, извршете ја новододадената скрипта npm:npm start
Во следниот и последен дел од овој водич, ќе ги поставиме натоварувачите на Webpack и ќе ги увеземе сите CSS и JavaScript на Bootstrap.
Увезете Bootstrap
За увоз на Bootstrap во Webpack се потребни натоварувачи што ги инсталиравме во првиот дел. Ги инсталиравме со npm, но сега Webpack треба да се конфигурира за да ги користи.
-
Поставете ги натоварувачите во
webpack.config.js
. Вашата конфигурациска датотека сега е завршена и треба да одговара на фрагментот подолу. Единствениот нов дел овде еmodule
делот.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' } ] } ] } }
Еве преглед зошто ни се потребни сите овие натоварувачи.
style-loader
го инјектира CSS во<style>
елемент во<head>
HTML-страницата,css-loader
помага при користењето@import
иurl()
,postcss-loader
е потребен за Autoprefixer иsass-loader
ни овозможува да користиме Sass. -
Сега, ајде да го увеземе CSS на Bootstrap. Додајте го следново за
src/scss/styles.scss
да го увезете целиот извор Sass на Bootstrap.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Ако сакате, можете и поединечно да ги увезете нашите листови со стилови. Прочитајте ги нашите документи за увоз на Sass за детали.
-
Следно, го вчитуваме CSS и увезуваме JavaScript на Bootstrap. Додајте го следново за
src/js/main.js
да го вчитате CSS и да ги увезете сите JS на Bootstrap. Popper ќе се увезе автоматски преку Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Можете исто така да увезувате приклучоци за JavaScript поединечно по потреба за да ги намалите големините на пакетите:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Прочитајте ги нашите JavaScript документи за повеќе информации за тоа како да ги користите приклучоците на Bootstrap.
-
И завршивте! 🎉 Со целосно вчитани Sass и JS изворот на Bootstrap, вашиот локален сервер за развој сега треба да изгледа вака.
Сега можете да започнете со додавање на сите компоненти на Bootstrap што сакате да ги користите. Задолжително проверете го целосниот проект за пример на Webpack за тоа како да вклучите дополнителен приспособен Sass и да ја оптимизирате вашата градба со увоз на само делови од CSS и JS на Bootstrap што ви се потребни.
Оптимизации на производство
Во зависност од поставувањето, можеби ќе сакате да имплементирате некои дополнителни оптимизации за безбедност и брзина корисни за извршување на проектот во производство. Имајте предвид дека овие оптимизации не се применуваат на проектот за пример Webpack и зависи од вас да ги имплементирате.
Извлекување на CSS
Ние style-loader
го конфигуриравме погоре погодно емитува CSS во пакетот, така што рачно вчитување на датотека CSS dist/index.html
не е потребно. Сепак, овој пристап може да не работи со строга Политика за безбедност на содржината и може да стане тесно грло во вашата апликација поради големата големина на пакетот.
За да го одделиме CSS за да можеме да го вчитаме директно од dist/index.html
, користете го mini-css-extract-loader
приклучокот Webpack.
Прво, инсталирајте го приклучокот:
npm install --save-dev mini-css-extract-plugin
Потоа инстанцирајте и користете го приклучокот во конфигурацијата на 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
},
{
Откако ќе се изврши npm run build
повторно, ќе има нова датотека dist/main.css
, која ќе ги содржи сите CSS увезени од src/js/main.js
. Ако гледате dist/index.html
во вашиот прелистувач сега, стилот ќе недостасува, како што е сега во dist/main.css
. Можете да го вклучите генерираниот CSS 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 датотеки
CSS на Bootstrap вклучува повеќекратни референци за SVG-датотеки преку вградени data:
URI. Ако дефинирате Политика за безбедност на содржината за вашиот проект што блокира data:
URI-и за слики, тогаш овие SVG-датотеки нема да се вчитаат. Можете да го надминете овој проблем со извлекување на вградените SVG-датотеки со помош на функцијата за модули за средства на Webpack.
Конфигурирајте го Webpack за извлекување на вградени SVG датотеки како ова:
--- 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: [
Откако ќе се изврши npm run build
повторно, ќе ги најдете SVG-датотеките извлечени dist/icons
и соодветно референцирани од CSS.
Видете нешто погрешно или застарено овде? Отворете проблем на GitHub . Ви треба помош за решавање проблеми? Пребарувајте или започнете дискусија на GitHub.