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 ຈາກ terminal, ແລະwebpack-dev-serverດັ່ງນັ້ນພວກເຮົາສາມາດດໍາເນີນການເຄື່ອງແມ່ຂ່າຍການພັດທະນາທ້ອງຖິ່ນ. ພວກເຮົາໃຊ້--save-devເພື່ອໃຫ້ສັນຍານວ່າຄວາມເພິ່ງພາອາໄສເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ສໍາລັບການນໍາໃຊ້ການພັດທະນາແລະບໍ່ແມ່ນການຜະລິດ.npm i --save-dev webpack webpack-cli webpack-dev-server
-  ຕິດຕັ້ງ Bootstrap. ຕອນນີ້ພວກເຮົາສາມາດຕິດຕັ້ງ Bootstrap ໄດ້. ພວກເຮົາຍັງຈະຕິດຕັ້ງ Popper ນັບຕັ້ງແຕ່ dropdowns ຂອງພວກເຮົາ, popovers, ແລະຄໍາແນະນໍາເຄື່ອງມືແມ່ນຂຶ້ນກັບມັນສໍາລັບຕໍາແຫນ່ງຂອງເຂົາເຈົ້າ. ຖ້າທ່ານບໍ່ວາງແຜນທີ່ຈະໃຊ້ອົງປະກອບເຫຼົ່ານັ້ນ, ທ່ານສາມາດຍົກເລີກ Popper ຢູ່ທີ່ນີ້. npm i --save bootstrap @popperjs/core
-  ຕິດຕັ້ງການເພິ່ງພາອາໄສເພີ່ມເຕີມ. ນອກເໜືອໄປຈາກ Webpack ແລະ Bootstrap, ພວກເຮົາຕ້ອງການຄວາມເພິ່ງພາອາໄສອີກໜ້ອຍໜຶ່ງເພື່ອນຳເຂົ້າ ແລະ ມັດ Bootstrap's CSS ແລະ JS ກັບ Webpack ຢ່າງຖືກຕ້ອງ. ເຫຼົ່ານີ້ລວມມີ Sass, ບາງ loaders, ແລະ 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
ດ້ວຍການຕິດຕັ້ງ dependencies ແລະໂຟນເດີ້ໂຄງການຂອງພວກເຮົາພ້ອມທີ່ຈະເລີ່ມຕົ້ນການຂຽນລະຫັດ, ພວກເຮົາສາມາດ configure Webpack ແລະດໍາເນີນການໂຄງການຂອງພວກເຮົາໃນທ້ອງຖິ່ນ.
-  ເປີດ webpack.config.jsໃນບັນນາທິການຂອງທ່ານ. ເນື່ອງຈາກມັນຫວ່າງເປົ່າ, ພວກເຮົາຈະຕ້ອງເພີ່ມການຕັ້ງຄ່າ boilerplate ບາງຢ່າງໃສ່ມັນເພື່ອໃຫ້ພວກເຮົາສາມາດເລີ່ມຕົ້ນເຄື່ອງແມ່ຂ່າຍຂອງພວກເຮົາໄດ້. ພາກສ່ວນນີ້ຂອງ config ບອກ 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 ພວກເຮົາຈະເພີ່ມໃສ່ມັນໃນຂັ້ນຕອນຕໍ່ມາ. ກ່ອນທີ່ພວກເຮົາຈະເຮັດແນວນັ້ນ, ພວກເຮົາຕ້ອງໃຫ້ມັນບາງສິ່ງບາງຢ່າງທີ່ຈະສະແດງແລະລວມເອົາoutputJS ຈາກຂັ້ນຕອນທີ່ຜ່ານມາ.<!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 script ເພື່ອດໍາເນີນການ Webpack. ເປີດ package.jsonແລະເພີ່ມສະstartຄິບທີ່ສະແດງຂ້າງລຸ່ມນີ້ (ທ່ານຄວນມີສະຄິບທົດສອບແລ້ວ). ພວກເຮົາຈະໃຊ້ສະຄຣິບນີ້ເພື່ອເລີ່ມຕົ້ນເຊີບເວີ Webpack dev ທ້ອງຖິ່ນຂອງພວກເຮົາ.{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-  ແລະສຸດທ້າຍ, ພວກເຮົາສາມາດເລີ່ມຕົ້ນ Webpack. ຈາກ my-projectໂຟນເດີໃນ terminal ຂອງທ່ານ, ດໍາເນີນການ npm script ທີ່ເພີ່ມໃຫມ່:npm start  
ໃນພາກຕໍ່ໄປແລະສຸດທ້າຍຂອງຄໍາແນະນໍານີ້, ພວກເຮົາຈະຕັ້ງຄ່າ Webpack loaders ແລະນໍາເຂົ້າທັງຫມົດຂອງ CSS ແລະ JavaScript ຂອງ Bootstrap.
ນໍາເຂົ້າ Bootstrap
ການນໍາເຂົ້າ Bootstrap ເຂົ້າໄປໃນ Webpack ຕ້ອງການຕົວໂຫຼດທີ່ພວກເຮົາຕິດຕັ້ງຢູ່ໃນພາກທໍາອິດ. ພວກເຮົາໄດ້ຕິດຕັ້ງພວກມັນດ້ວຍ npm, ແຕ່ດຽວນີ້ Webpack ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າເພື່ອໃຊ້ພວກມັນ.
-  ຕັ້ງຄ່າ loaders ໃນ 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-loaderinjects 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'ນອກນັ້ນທ່ານຍັງສາມາດນໍາເຂົ້າ plugins JavaScript ສ່ວນບຸກຄົນຕາມຄວາມຕ້ອງການເພື່ອຮັກສາຂະຫນາດມັດລົງ: import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'ອ່ານເອກະສານ JavaScript ຂອງພວກເຮົາ ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບວິທີການໃຊ້ plugins ຂອງ 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-loaderWebpack plugin.
ກ່ອນອື່ນ ໝົດ, ຕິດຕັ້ງ plugin:
npm install --save-dev mini-css-extract-plugin
ຫຼັງຈາກນັ້ນ, instantiate ແລະນໍາໃຊ້ 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:URIs ໃນແຖວ. ຖ້າທ່ານກໍານົດນະໂຍບາຍຄວາມປອດໄພເນື້ອຫາສໍາລັບໂຄງການຂອງທ່ານທີ່ບລັອກ data:URIs ສໍາລັບຮູບພາບ, ຫຼັງຈາກນັ້ນໄຟລ໌ 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.