Bootstrap & Paket Web
Panduan resmi tentang cara memasukkan dan menggabungkan CSS dan JavaScript Bootstrap dalam proyek Anda menggunakan Webpack.
Mempersiapkan
Kami sedang membangun proyek Webpack dengan Bootstrap dari awal, jadi ada beberapa prasyarat dan langkah awal sebelum kami benar-benar dapat memulai. Panduan ini mengharuskan Anda untuk menginstal Node.js dan beberapa keakraban dengan terminal.
-
Buat folder proyek dan atur npm. Kami akan membuat
my-project
folder dan menginisialisasi npm dengan-y
argumen untuk menghindarinya menanyakan semua pertanyaan interaktif kepada kami.mkdir my-project && cd my-project npm init -y
-
Instal Paket Web. Selanjutnya kita perlu menginstal dependensi pengembangan Webpack kita:
webpack
untuk inti Webpack,webpack-cli
sehingga kita dapat menjalankan perintah Webpack dari terminal, danwebpack-dev-server
agar kita dapat menjalankan server pengembangan lokal. Kami menggunakan--save-dev
untuk memberi sinyal bahwa dependensi ini hanya untuk penggunaan pengembangan dan bukan untuk produksi.npm i --save-dev webpack webpack-cli webpack-dev-server
-
Instal Bootstrap. Sekarang kita dapat menginstal Bootstrap. Kami juga akan menginstal Popper karena dropdown, popover, dan tooltips kami bergantung padanya untuk pemosisiannya. Jika Anda tidak berencana menggunakan komponen tersebut, Anda dapat menghilangkan Popper di sini.
npm i --save bootstrap @popperjs/core
-
Instal dependensi tambahan. Selain Webpack dan Bootstrap, kami memerlukan beberapa dependensi lagi untuk mengimpor dan menggabungkan CSS dan JS Bootstrap dengan Webpack dengan benar. Ini termasuk Sass, beberapa loader, dan Autoprefixer.
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
Sekarang kita telah menginstal semua dependensi yang diperlukan, kita dapat mulai bekerja membuat file proyek dan mengimpor Bootstrap.
Struktur proyek
Kami telah membuat my-project
folder dan menginisialisasi npm. Sekarang kita juga akan membuat folder src
dan dist
untuk melengkapi struktur proyek. Jalankan yang berikut dari my-project
, atau secara manual buat folder dan struktur file yang ditunjukkan di bawah ini.
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
Setelah selesai, proyek lengkap Anda akan terlihat seperti ini:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
Pada titik ini, semuanya berada di tempat yang tepat, tetapi Webpack tidak akan berfungsi karena kami belum mengisinya webpack.config.js
.
Konfigurasi Webpack
Dengan dependensi terpasang dan folder proyek kami siap untuk memulai pengkodean, kami sekarang dapat mengonfigurasi Webpack dan menjalankan proyek kami secara lokal.
-
Buka
webpack.config.js
di editor Anda. Karena kosong, kita perlu menambahkan beberapa konfigurasi boilerplate sehingga kita dapat memulai server kita. Bagian dari konfigurasi ini memberi tahu Webpack untuk mencari JavaScript proyek kami, tempat untuk mengeluarkan kode yang dikompilasi ke (dist
), dan bagaimana server pengembangan harus berperilaku (menarik daridist
folder dengan 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 } }
-
Selanjutnya kita isi
dist/index.html
. Ini adalah halaman HTML yang akan dimuat Webpack di browser untuk memanfaatkan CSS dan JS yang dibundel yang akan kami tambahkan di langkah selanjutnya. Sebelum kita bisa melakukannya, kita harus memberikan sesuatu untuk dirender dan menyertakanoutput
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 gaya Bootstrap di sini dengan
div class="container"
dan<button>
agar kami melihat saat CSS Bootstrap dimuat oleh Webpack. -
Sekarang kita membutuhkan skrip npm untuk menjalankan Webpack. Buka
package.json
dan tambahkanstart
skrip yang ditunjukkan di bawah ini (Anda seharusnya sudah memiliki skrip pengujian). Kami akan menggunakan skrip ini untuk memulai server dev Webpack lokal kami.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
Dan akhirnya, kita bisa memulai Webpack. Dari
my-project
folder di terminal Anda, jalankan skrip npm yang baru ditambahkan:npm start
Di bagian berikutnya dan terakhir dari panduan ini, kita akan menyiapkan pemuat Webpack dan mengimpor semua CSS dan JavaScript Bootstrap.
Impor Bootstrap
Mengimpor Bootstrap ke Webpack membutuhkan loader yang kami instal di bagian pertama. Kami telah menginstalnya dengan npm, tetapi sekarang Webpack perlu dikonfigurasi untuk menggunakannya.
-
Siapkan loader di
webpack.config.js
. File konfigurasi Anda sekarang selesai dan harus cocok dengan cuplikan di bawah ini. Satu-satunya bagian baru di sini adalahmodule
bagian.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 adalah rekap mengapa kita membutuhkan semua loader ini.
style-loader
menyuntikkan CSS ke dalam<style>
elemen di<head>
halaman HTML,css-loader
membantu menggunakan@import
danurl()
,postcss-loader
diperlukan untuk Autoprefixer, dansass-loader
memungkinkan kita menggunakan Sass. -
Sekarang, mari impor CSS Bootstrap. Tambahkan yang berikut ini untuk
src/scss/styles.scss
mengimpor semua sumber Bootstrap Sass.// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
Anda juga dapat mengimpor stylesheet kami satu per satu jika Anda mau. Baca dokumen impor Sass kami untuk detailnya.
-
Selanjutnya kita memuat CSS dan mengimpor JavaScript Bootstrap. Tambahkan yang berikut ini untuk
src/js/main.js
memuat CSS dan mengimpor semua JS Bootstrap. Popper akan diimport secara otomatis melalui Bootstrap.// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
Anda juga dapat mengimpor plugin JavaScript satu per satu sesuai kebutuhan untuk menjaga ukuran bundel tetap rendah:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
Baca dokumen JavaScript kami untuk informasi lebih lanjut tentang cara menggunakan plugin Bootstrap.
-
Dan Anda sudah selesai! Dengan Sass dan JS sumber Bootstrap terisi penuh, server pengembangan lokal Anda sekarang akan terlihat seperti ini.
Sekarang Anda dapat mulai menambahkan komponen Bootstrap apa pun yang ingin Anda gunakan. Pastikan untuk memeriksa proyek contoh Webpack lengkap tentang cara menyertakan Sass kustom tambahan dan mengoptimalkan build Anda dengan mengimpor hanya bagian CSS dan JS Bootstrap yang Anda butuhkan.
Optimalisasi produksi
Bergantung pada penyiapan Anda, Anda mungkin ingin menerapkan beberapa keamanan tambahan dan pengoptimalan kecepatan yang berguna untuk menjalankan proyek dalam produksi. Perhatikan bahwa pengoptimalan ini tidak diterapkan pada proyek contoh Webpack dan terserah Anda untuk menerapkannya.
Mengekstrak CSS
Yang style-loader
kami konfigurasikan di atas dengan mudah memancarkan CSS ke dalam bundel sehingga memuat file CSS secara manual dist/index.html
tidak diperlukan. Namun, pendekatan ini mungkin tidak berfungsi dengan Kebijakan Keamanan Konten yang ketat, dan mungkin menjadi hambatan dalam aplikasi Anda karena ukuran bundel yang besar.
Untuk memisahkan CSS agar kita dapat memuatnya langsung dari dist/index.html
, gunakan mini-css-extract-loader
plugin Webpack.
Pertama, instal plugin:
npm install --save-dev mini-css-extract-plugin
Kemudian instantiate dan gunakan plugin 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
},
{
Setelah dijalankan npm run build
kembali, akan ada file baru dist/main.css
yang berisi semua CSS yang diimpor oleh src/js/main.js
. Jika Anda melihat dist/index.html
di browser Anda sekarang, gaya akan hilang, seperti sekarang di dist/main.css
. Anda dapat 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 file SVG
CSS Bootstrap menyertakan banyak referensi ke file SVG melalui data:
URI sebaris. Jika Anda menentukan Kebijakan Keamanan Konten untuk proyek Anda yang memblokir data:
URI untuk gambar, maka file SVG ini tidak akan dimuat. Anda dapat mengatasi masalah ini dengan mengekstrak file SVG sebaris menggunakan fitur modul aset Webpack.
Konfigurasikan Webpack untuk mengekstrak file 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: [
Setelah dijalankan npm run build
kembali, Anda akan menemukan file SVG yang diekstrak dist/icons
dan direferensikan dengan benar dari CSS.
Lihat sesuatu yang salah atau ketinggalan zaman di sini? Silakan buka masalah di GitHub . Butuh bantuan pemecahan masalah? Cari atau mulai diskusi di GitHub.