---
# System prepended metadata

title: Webpack
tags: [Learn]

---

---
tags: Learn
---

# Webpack

## 簡易的創建 webpack 方式

先創建一個資料夾 這裡取名為 `webpack-demo`

然後我們開啟終端機 通過 `npm init` 快速創建一個 `package.json` 文件

打開 `package.json` 找到 `scripts` 將其改為如下內容：

```js
"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",


  // 加上這行
  "build": "webpack" // 通過 npm run build 執行 webpack 打包編譯

},
```

接下來安裝 `webpack` 與 `webpack-cli` (記得加上 `--save`)

接下來我們在 `webpack-demo` 下創建一個 `src` 資料夾

裡面放入口文件(`main.js`) 與其他需要被編譯的檔案(ex: `helper.js` `all.scss`)

先創建 `helper.js` 文件 在裡面通過 `export default{}` 匯出一個函數簡單 `log` 一段話

`helper.js` 文件內容如下：

```js
export default {
  fn() {
    console.log("this is a js code");
  },
};
```

接下來開啟 `main.js` 輸入以下內容：

```js
import helpers from "./helper";

helpers.fn();
```

完成後在 `webpack-demo` 資料夾中創建一個檔案 `webpack.config.js` (它是 `webpack` 的設定檔)

創建後在裡面貼上以下內容：

```js
// node 的 path
const path = require("path");

module.exports = {
  // webpack 的入口文件
  entry: "./src/main.js",

  // webpack 的出口文件
  output: {
    // 編譯後生成的資料夾為在該項目目錄下的 dist 資料夾
    path: path.resolve(__dirname, "dist"),
    // 編譯後生成的文件名稱
    filename: "main.bundle.js",
  },
};

module.exports = config;
```

然後我們開啟終端機 切換到 `webpack-demo` 資料夾 通過 `npm run build` 執行編譯打包獲得 `dist` 資料夾

現在將 `dist` 資料夾另外用一個編輯器開啟線上瀏覽 即可看見 `helper.js` 中所寫的 `log` 了

以上是 `js` 方面的編譯打包 因為 `webpack` 內建 `js` 編譯

## css 與 sass 的編譯

接下來我們在 `src` 資料夾中創建一個 `all.css` 簡單修改 `body` 的背景色即可

然後上網搜尋 `css-loader` 它的說明文件中會要求你安裝 `css-loader`

即開啟終端機輸入以下內容：

```sell
npm install --save-dev css-loader
```

然後我們開啟 `webpack.config.js` 貼上 `css-loader` 說明文件中的模組規範

現在你的 `webpack.config.js` 內容如下：

```js
const path = require("path");

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "main.bundle.js",
  },
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};
```

完成後再次開啟終端機 切換到 `webpack-demo` 資料夾 通過 `npm run build` 執行編譯打包獲得 `dist` 資料夾

再將 `dist` 資料夾另外用一個編輯器開啟線上瀏覽 即可看見背景色更改了

而 sass 則也是上網查詢 sass-loader 的說明文件 依序安裝 sass-loader 等

再到 `webpack.config.js` 中添加上 `sass-loader` 的 `rules`

最後執行 `npm run build` 重新打包即可

## devServe

在每次編譯代碼時都需要手動 npm run build 會比較費時

可以通過 webpack 提供的 webpack-dev-server 讓代碼在每次修改後自動編譯執行

安裝方式為開啟終端機輸入以下代碼：

```shell
npm i webpack-dev-server --save
```

接下來將 webpack 設定檔改為下方內容：

```js
const path = require("path");

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "main.bundle.js",
  },
  // 主要添加這段
  devServer: {
    contentBase: path.join(__dirname, "dist"),
    compress: true,
    port: 9000,
  },
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};
```

再開啟 `package.json` 將 `scripts` 改為下方：

```js
"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",

  "start": "webpack serve", // 主要加這行

  "build": "webpack"
},
```

現在就可以直接通過 npm start 來執行實時編譯了
