iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Modern Web

Follow me! 來一場前端技能樹之旅系列 第 18

[Day 18 - webpack] 模組化開發好幫手 — 打包工具 webpack

  • 分享至 

  • xImage
  •  

為什麼要使用 webpack?

在前一篇文章提到,有愈來愈多開源套件,可以幫助我們加速開發。當功能愈來愈多,將所有程式碼都寫在同一個 JS 檔案中會難以管理。

如果能以模組化的方式進行開發,將程式碼拆開成不同的檔案,讓每個檔案各自串聯所使用到的程式碼或套件,不只可以加速網頁載入,也更可以提升專案的維護性。為了在瀏覽器上達成這樣的模組化開發,就有了 webpack 這樣的打包工具出現。

webpack

如所說的:Webpack 是一個「打包工具」,將各種模組套件和資源打包成一個檔案,讓瀏覽器能夠正常編譯模組化的程式碼。它可以做到:

  • 打包多個 JS 檔案變成單一的檔案,解決使用多個 JS 檔造成變數污染的問題
  • 能夠在程式碼中使用 import 引入 npm packages
  • 引入任何類型的檔案到 JS ,例如:圖片檔
  • 優化程式碼
  • ...

讓我們直接用一個範例來演示 webpack 是如何打包的,首先在 test.js ,有一個要在 index.js 使用的函式 test()

test.js

export default function test() {
  return "hello"
}

index.js

document.getElementById('target').innerText = test();

在 HTML 加入 Script,目前需要同時引入 test.js 才能在 index.js 使用 test()

index.html

<!DOCTYPE html>
<html lang="en">
<head>...</head>
<body>
    <div id="target"></div>
    <script src="./test.js"></script>
    <script src="./index.js"></script>
</body>
</html>

安裝 webpack

透過 npm 安裝 webpack、webpack-cli:

npm init
npm install webpack webpack-cli --save-dev

webpack.config.js

設定配置檔 webpack.config.js,告訴 webpack 該如何編譯和打包程式碼:

module.exports = {
  mode: "development",
  entry: "./index.js",
  output: {
    path: __dirname,
    filename: "bundle.js",
  },
};
  • mode:可以設定執行模式為 development 或 production。
  • entry:設定入口文件為 index.js
  • output:輸出的相關設定
  • path:指定打包後輸出文件的目錄
  • filname:打包輸出的檔名

建立 webpack 的配置檔後,修改一下先前的範例,改成直接在 index.js 使用 import 引入 test()

index.js

import test from './test.js'

document.getElementById('target').innerText = test();

執行 webpack

在 package.json 的 scripts 屬性新增執行指令:

"scripts": {
    "start": "webpack"
},

接著就可以輸入指令執行 webpack 打包檔案囉

npm run start

依照上面視窗顯示的執行畫面,webpack 會將 index.js 和 test.js 一併打包成指定的檔案 bundle.js,這樣 HTML 就只要引入這一份程式碼,就可以有和之前分別引入兩份 script 相同的效果。

index.html

<!DOCTYPE html>
<html lang="en">
<head>...</head>
<body>
    <div id="target"></div>
    <script src="./bundle.js"></script>
</body>
</html>

Loader

在一開始有提到可以引入任何類型的檔案,例如:圖片檔、CSS等等, 而 webpack 會透過 Loader 將這些檔案進行預處理,才能成功加載這些文件。

舉例來說,要引入的是 CSS 檔,首先安裝會使用到 style-loader 和 css-loader。並且一樣設定配置檔,讓 webpack 知道該怎麼處理 CSS 類型的檔案:

npm install --save-dev style-loader css-loader

webpack.config.js

...,
module: {
  rules: [
    {
      test: /\.css$/,     //結尾是.css的檔案
      use: ["style-loader", "css-loader"]
    }
  ]
}

接下來新增 CSS 樣式,直接把檔案引入 JS:

style.css

body {
    background-color: #ffcccc;
}

index.js

import './style.css';

成功!


小結

希望到這邊大家都能了解使用 webpack 的理由,以及如何使用 webpack 進行模組化開發。下一篇文章,就會進入到 React 框架,我們會使用到一些套件,並且用模組化的方式進行開發,那就下章再見囉!

如果文章中有錯誤的地方,要麻煩各位大大不吝賜教;喜歡的話,也要記得幫我按讚訂閱喔❤️

參考資料


上一篇
[Day 17 - npm] 哆啦A夢有百寶袋,我有套件管理工具npm
下一篇
[Day 19 - React] 現在開始用框架寫網頁 — React
系列文
Follow me! 來一場前端技能樹之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言