រំលងទៅមាតិកាសំខាន់ រំលងទៅការរុករកឯកសារ
Check
in English

Bootstrap & Webpack

មគ្គុទ្ទេសក៍ផ្លូវការសម្រាប់របៀបបញ្ចូល និងបាច់ CSS និង JavaScript របស់ Bootstrap នៅក្នុងគម្រោងរបស់អ្នកដោយប្រើ Webpack ។

ចង់​រំលង​ដល់​ចប់? ទាញយកកូដប្រភព និងការបង្ហាញសាកល្បងសម្រាប់មគ្គុទ្ទេសក៍នេះពី ឃ្លាំង tws/example ។ អ្នកក៏អាច បើកឧទាហរណ៍នៅក្នុង StackBlitz សម្រាប់ការកែសម្រួលផ្ទាល់។

រៀបចំ

យើងកំពុងបង្កើតគម្រោង Webpack ដោយប្រើ Bootstrap ពីដំបូង ដូច្នេះមានតម្រូវការជាមុន និងជំហានខាងមុខមួយចំនួន មុនពេលដែលយើងអាចចាប់ផ្តើមបាន។ ការណែនាំនេះតម្រូវឱ្យអ្នកដំឡើង Node.js និងស្គាល់ពីស្ថានីយ។

  1. បង្កើតថតគម្រោង និងដំឡើង npm ។ យើងនឹងបង្កើត my-projectថតឯកសារ ហើយចាប់ផ្តើម npm ជាមួយនឹង -yអាគុយម៉ង់ ដើម្បីចៀសវាងការសួរសំណួរអន្តរកម្មទាំងអស់។

    mkdir my-project && cd my-project
    npm init -y
    
  2. ដំឡើង Webpack ។ បន្ទាប់មកយើងត្រូវដំឡើងភាពអាស្រ័យនៃការអភិវឌ្ឍន៍ Webpack របស់យើង៖ webpackសម្រាប់ស្នូលនៃ Webpack webpack-cliដូច្នេះយើងអាចដំណើរការពាក្យបញ្ជា Webpack ពីស្ថានីយ ហើយ webpack-dev-serverដូច្នេះយើងអាចដំណើរការម៉ាស៊ីនមេអភិវឌ្ឍន៍មូលដ្ឋានបាន។ យើងប្រើ --save-devដើម្បីផ្តល់សញ្ញាថាភាពអាស្រ័យទាំងនេះគឺសម្រាប់តែការប្រើប្រាស់ក្នុងការអភិវឌ្ឍន៍ប៉ុណ្ណោះ មិនមែនសម្រាប់ផលិតទេ។

    npm i --save-dev webpack webpack-cli webpack-dev-server
    
  3. ដំឡើង Bootstrap ។ ឥឡូវនេះយើងអាចដំឡើង Bootstrap បាន។ យើងក៏នឹងដំឡើង Popper ផងដែរ ចាប់តាំងពីការទម្លាក់ចុះ ការលេចឡើង និងព័ត៌មានជំនួយរបស់យើងអាស្រ័យលើវាសម្រាប់ទីតាំងរបស់ពួកគេ។ ប្រសិនបើអ្នកមិនមានគម្រោងប្រើសមាសធាតុទាំងនោះទេ អ្នកអាចលុបចោល Popper នៅទីនេះ។

    npm i --save bootstrap @popperjs/core
    
  4. ដំឡើងភាពអាស្រ័យបន្ថែម។ បន្ថែមពីលើ Webpack និង Bootstrap យើងត្រូវការភាពអាស្រ័យមួយចំនួនបន្ថែមទៀតដើម្បីនាំចូល និងចងភ្ជាប់ CSS និង JS របស់ Bootstrap ឱ្យបានត្រឹមត្រូវជាមួយ Webpack ។ ទាំងនេះរួមមាន Sass ឧបករណ៍ផ្ទុកមួយចំនួន និង Autoprefixer ។

    npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
    

ឥឡូវនេះយើងបានដំឡើងភាពអាស្រ័យចាំបាច់ទាំងអស់ យើងអាចធ្វើការបង្កើតឯកសារគម្រោង និងនាំចូល Bootstrap ។

រចនាសម្ព័ន្ធគម្រោង

យើងបានបង្កើត my-projectFolder និងចាប់ផ្តើម 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 និងដំណើរការគម្រោងរបស់យើងនៅក្នុងមូលដ្ឋាន។

  1. បើក webpack.config.jsនៅក្នុងកម្មវិធីនិពន្ធរបស់អ្នក។ ដោយសារវាទទេ យើងនឹងត្រូវបន្ថែមការកំណត់រចនាសម្ព័ន្ធ boilerplate មួយចំនួនទៅវា ដូច្នេះយើងអាចចាប់ផ្តើមម៉ាស៊ីនមេរបស់យើង។ ផ្នែកនៃការកំណត់នេះប្រាប់ 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
      }
    }
    
  2. បន្ទាប់យើងបំពេញរបស់យើង 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 ។

  3. ឥឡូវនេះយើងត្រូវការអក្សរ npm ដើម្បីដំណើរការ Webpack ។ បើក package.jsonនិងបន្ថែម startស្គ្រីបដែលបង្ហាញខាងក្រោម (អ្នកគួរតែមានស្គ្រីបសាកល្បងរួចហើយ)។ យើងនឹងប្រើស្គ្រីបនេះ ដើម្បីចាប់ផ្តើមម៉ាស៊ីនមេ Webpack dev ក្នុងតំបន់របស់យើង។

    {
      // ...
      "scripts": {
        "start": "webpack serve --mode development",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      // ...
    }
    
  4. ហើយចុងក្រោយ យើងអាចចាប់ផ្តើម Webpack បាន។ ពី my-projectថតនៅក្នុងស្ថានីយរបស់អ្នក សូមដំណើរការអក្សរ npm ដែលបានបន្ថែមថ្មីនោះ៖

    npm start
    
    Webpack dev server កំពុងដំណើរការ

នៅក្នុងផ្នែកបន្ទាប់ និងចុងក្រោយនៃការណែនាំនេះ យើងនឹងដំឡើងកម្មវិធីផ្ទុក Webpack ហើយនាំចូល CSS និង JavaScript ទាំងអស់របស់ Bootstrap។

នាំចូល Bootstrap

ការនាំចូល Bootstrap ទៅក្នុង Webpack តម្រូវឱ្យអ្នកផ្ទុកដែលយើងបានដំឡើងនៅក្នុងផ្នែកដំបូង។ យើងបានដំឡើងពួកវាជាមួយ npm ប៉ុន្តែឥឡូវនេះ Webpack ចាំបាច់ត្រូវកំណត់រចនាសម្ព័ន្ធដើម្បីប្រើវា។

  1. ដំឡើងឧបករណ៍ផ្ទុកនៅក្នុង 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តម្រូវ ឱ្យប្រើ Autoprefixer និង អនុញ្ញាតឱ្យយើងប្រើ Sass ។url()postcss-loadersass-loader

  2. ឥឡូវនេះ ចូរយើងនាំចូល CSS របស់ Bootstrap ។ បន្ថែមខាងក្រោមដើម្បី src/scss/styles.scssនាំចូល Sass ប្រភពរបស់ Bootstrap ទាំងអស់។

    // Import all of Bootstrap's CSS
    @import "~bootstrap/scss/bootstrap";
    

    អ្នកក៏អាចនាំចូលសន្លឹករចនាប័ទ្មរបស់យើងជាលក្ខណៈបុគ្គលប្រសិនបើអ្នកចង់បាន។ សូមអានឯកសារនាំចូល Sass របស់យើង សម្រាប់ព័ត៌មានលម្អិត។

  3. បន្ទាប់យើងផ្ទុក 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 ។

  4. ហើយអ្នករួចរាល់ហើយ! 🎉 ជាមួយនឹងប្រភពរបស់ Bootstrap Sass និង JS ត្រូវបានផ្ទុកយ៉ាងពេញលេញ នោះម៉ាស៊ីនមេអភិវឌ្ឍន៍មូលដ្ឋានរបស់អ្នកឥឡូវនេះគួរតែមើលទៅដូចនេះ។

    ម៉ាស៊ីនមេ Webpack dev ដំណើរការជាមួយ Bootstrap

    ឥឡូវនេះអ្នកអាចចាប់ផ្តើមបន្ថែមសមាសធាតុ Bootstrap ណាមួយដែលអ្នកចង់ប្រើ។ ត្រូវប្រាកដថា ពិនិត្យមើលគម្រោងឧទាហរណ៍ Webpack ពេញលេញ សម្រាប់របៀបបញ្ចូល Sass ផ្ទាល់ខ្លួនបន្ថែម និងបង្កើនប្រសិទ្ធភាពការស្ថាបនារបស់អ្នកដោយនាំចូលតែផ្នែកនៃ CSS និង JS របស់ Bootstrap ដែលអ្នកត្រូវការ។

ការបង្កើនប្រសិទ្ធភាពផលិតកម្ម

អាស្រ័យលើការរៀបចំរបស់អ្នក អ្នកប្រហែលជាចង់អនុវត្តការបង្កើនប្រសិទ្ធភាពសុវត្ថិភាព និងល្បឿនបន្ថែមមួយចំនួនដែលមានប្រយោជន៍សម្រាប់ដំណើរការគម្រោងនៅក្នុងផលិតកម្ម។ ចំណាំថាការបង្កើនប្រសិទ្ធភាពទាំងនេះមិនត្រូវបានអនុវត្តនៅលើ គម្រោងឧទាហរណ៍របស់ Webpack ហើយអាស្រ័យលើអ្នកក្នុងការអនុវត្ត។

ការដកស្រង់ CSS

យើងបានកំណត់ រចនាសម្ព័ន្ធ ខាងលើយ៉ាងងាយស្រួលបញ្ចេញ CSS ទៅក្នុងបណ្តុំ ដូច្នេះ មិនចាំបាច់ style-loaderផ្ទុកឯកសារ 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:URIs ខាងក្នុង។ ប្រសិនបើអ្នកកំណត់គោលការណ៍សុវត្ថិភាពខ្លឹមសារសម្រាប់គម្រោងរបស់អ្នកដែលរារាំង 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 ។