Bootstrap & Webpack
Panduan rasmi untuk cara memasukkan dan menggabungkan CSS dan JavaScript Bootstrap dalam projek anda menggunakan Webpack.
Persediaan
Kami sedang membina projek Webpack dengan Bootstrap dari awal, jadi terdapat beberapa prasyarat dan langkah hadapan sebelum kami benar-benar boleh bermula. Panduan ini memerlukan anda memasang Node.js dan membiasakan diri dengan terminal.
-
Buat folder projek dan sediakan npm. Kami akan mencipta
my-project
folder dan memulakan npm dengan-y
hujah untuk mengelakkannya bertanya kepada kami semua soalan interaktif.mkdir my-project && cd my-project npm init -y
-
Pasang Webpack. Seterusnya, kami perlu memasang kebergantungan pembangunan Webpack kami:
webpack
untuk teras Webpack,webpack-cli
supaya kami boleh menjalankan arahan Webpack dari terminal, danwebpack-dev-server
supaya kami boleh menjalankan pelayan pembangunan setempat. Kami gunakan--save-dev
untuk memberi isyarat bahawa kebergantungan ini hanya untuk kegunaan pembangunan dan bukan untuk pengeluaran.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Pasang Bootstrap. Sekarang kita boleh memasang Bootstrap. Kami juga akan memasang Popper kerana dropdown, popover dan petua alat kami bergantung padanya untuk kedudukannya. Jika anda tidak merancang untuk menggunakan komponen tersebut, anda boleh meninggalkan Popper di sini.
npm i --save bootstrap @popperjs/core
-
Pasang kebergantungan tambahan. Selain Webpack dan Bootstrap, kami memerlukan beberapa lagi kebergantungan untuk mengimport dan menggabungkan CSS dan JS Bootstrap dengan betul dengan Webpack. Ini termasuk Sass, beberapa pemuat dan Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Memandangkan kita telah memasang semua kebergantungan yang diperlukan, kita boleh mula bekerja membuat fail projek dan mengimport Bootstrap.
Struktur projek
Kami telah mencipta my-project
folder dan memulakan npm. Sekarang kami juga akan mencipta folder src
dan kami dist
untuk melengkapkan struktur projek. Jalankan yang berikut daripada my-project
, atau buat folder dan struktur fail secara manual yang ditunjukkan di bawah.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Apabila anda selesai, projek lengkap anda sepatutnya kelihatan seperti ini:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
Pada ketika ini, semuanya berada di tempat yang betul, tetapi Webpack tidak akan berfungsi kerana kami masih belum mengisinya webpack.config.js
.
Konfigurasikan Webpack
Dengan kebergantungan dipasang dan folder projek kami sedia untuk kami memulakan pengekodan, kami kini boleh mengkonfigurasi Webpack dan menjalankan projek kami secara setempat.
-
Buka
webpack.config.js
dalam editor anda. Oleh kerana ia kosong, kami perlu menambahkan beberapa konfigurasi boilerplate padanya supaya kami boleh memulakan pelayan kami. Bahagian konfigurasi ini memberitahu Webpack adalah untuk mencari JavaScript projek kami, tempat untuk mengeluarkan kod yang disusun ke (dist
), dan bagaimana pelayan pembangunan harus bertindak (menarik daridist
folder dengan muat semula panas).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 } }
-
Seterusnya kita mengisi
dist/index.html
. Ini ialah halaman HTML yang Webpack akan dimuatkan dalam penyemak imbas untuk menggunakan CSS dan JS yang digabungkan yang akan kami tambahkan padanya dalam langkah-langkah seterusnya. Sebelum kita boleh melakukannya, kita perlu memberikan sesuatu untuk dibuat dan memasukkanoutput
JS dari langkah sebelumnya.<!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>
Kami menyertakan sedikit penggayaan Bootstrap di sini dengan
div class="container"
dan<button>
supaya kami melihat apabila CSS Bootstrap dimuatkan oleh Webpack. -
Sekarang kita memerlukan skrip npm untuk menjalankan Webpack. Buka
package.json
dan tambahstart
skrip yang ditunjukkan di bawah (anda sepatutnya sudah mempunyai skrip ujian). Kami akan menggunakan skrip ini untuk memulakan pelayan pembangun Webpack tempatan kami.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
Dan akhirnya, kita boleh mulakan Webpack. Dari
my-project
folder dalam terminal anda, jalankan skrip npm yang baru ditambahkan itu:npm start
Dalam bahagian seterusnya dan terakhir untuk panduan ini, kami akan menyediakan pemuat Webpack dan mengimport semua CSS dan JavaScript Bootstrap.
Import Bootstrap
Mengimport Bootstrap ke dalam Webpack memerlukan pemuat yang kami pasang di bahagian pertama. Kami telah memasangnya dengan npm, tetapi kini Webpack perlu dikonfigurasikan untuk menggunakannya.
-
Sediakan pemuat dalam
webpack.config.js
. Fail konfigurasi anda kini lengkap dan sepatutnya sepadan dengan coretan di bawah. Satu-satunya bahagian baru di sini ialahmodule
bahagian.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' } ] } ] } }
Berikut ialah ringkasan mengapa kami memerlukan semua pemuat ini.
style-loader
menyuntik CSS ke dalam<style>
elemen dalam<head>
halaman HTML,css-loader
membantu menggunakan@import
danurl()
,postcss-loader
diperlukan untuk Autoprefixer dansass-loader
membolehkan kami menggunakan Sass. -
Sekarang, mari kita import CSS Bootstrap. Tambahkan yang berikut untuk
src/scss/styles.scss
mengimport semua Sass sumber Bootstrap.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Anda juga boleh mengimport helaian gaya kami secara individu jika anda mahu. Baca dokumen import Sass kami untuk mendapatkan butiran.
-
Seterusnya kami memuatkan CSS dan mengimport JavaScript Bootstrap. Tambahkan yang berikut untuk
src/js/main.js
memuatkan CSS dan mengimport semua JS Bootstrap. Popper akan diimport secara automatik melalui Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Anda juga boleh mengimport pemalam JavaScript secara individu mengikut keperluan untuk mengurangkan saiz berkas:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Baca dokumen JavaScript kami untuk mendapatkan maklumat lanjut tentang cara menggunakan pemalam Bootstrap.
-
Dan anda sudah selesai! 🎉 Dengan sumber Bootstrap Sass dan JS dimuatkan sepenuhnya, pelayan pembangunan tempatan anda kini sepatutnya kelihatan seperti ini.
Kini anda boleh mula menambah mana-mana komponen Bootstrap yang anda mahu gunakan. Pastikan anda menyemak projek contoh Webpack yang lengkap untuk cara memasukkan Sass tersuai tambahan dan mengoptimumkan binaan anda dengan mengimport hanya bahagian CSS dan JS Bootstrap yang anda perlukan.
Pengoptimuman pengeluaran
Bergantung pada persediaan anda, anda mungkin mahu melaksanakan beberapa keselamatan tambahan dan pengoptimuman kelajuan yang berguna untuk menjalankan projek dalam pengeluaran. Ambil perhatian bahawa pengoptimuman ini tidak digunakan pada projek contoh Webpack dan terpulang kepada anda untuk melaksanakannya.
Mengekstrak CSS
Yang style-loader
kami konfigurasikan di atas dengan mudah mengeluarkan CSS ke dalam berkas supaya memuatkan fail CSS secara manual dist/index.html
tidak diperlukan. Pendekatan ini mungkin tidak berfungsi dengan Dasar Keselamatan Kandungan yang ketat, walau bagaimanapun, dan ia mungkin menjadi halangan dalam aplikasi anda kerana saiz berkas yang besar.
Untuk memisahkan CSS supaya kami boleh memuatkannya terus daripada dist/index.html
, gunakan mini-css-extract-loader
pemalam Webpack.
Pertama, pasang pemalam:
npm install --save-dev mini-css-extract-plugin
Kemudian nyatakan dan gunakan pemalam dalam konfigurasi 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
},
{
Selepas berjalan npm run build
semula, akan ada fail baharu dist/main.css
, yang akan mengandungi semua CSS yang diimport oleh src/js/main.js
. Jika anda melihat dist/index.html
dalam penyemak imbas anda sekarang, gaya itu akan hilang, kerana ia kini dalam dist/main.css
. Anda boleh memasukkan CSS yang dihasilkan dist/index.html
seperti ini:
--- 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>
Mengekstrak fail SVG
CSS Bootstrap termasuk berbilang rujukan kepada fail SVG melalui data:
URI sebaris. Jika anda menentukan Dasar Keselamatan Kandungan untuk projek anda yang menyekat data:
URI untuk imej, maka fail SVG ini tidak akan dimuatkan. Anda boleh mengatasi masalah ini dengan mengekstrak fail SVG sebaris menggunakan ciri modul aset Webpack.
Konfigurasikan Webpack untuk mengekstrak fail SVG sebaris seperti ini:
--- 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: [
Selepas berjalan npm run build
semula, anda akan menemui fail SVG yang diekstrak ke dalam dist/icons
dan dirujuk dengan betul daripada CSS.
Nampak sesuatu yang salah atau ketinggalan zaman di sini? Sila buka isu pada GitHub . Perlukan bantuan menyelesaikan masalah? Cari atau mulakan perbincangan di GitHub.