What is Webpack ?
- 前端程式碼模組化後的打包工具
- 讓我們可將前端的JS, CSS模組化, 透過Webpack打包成一個(或多個)檔案後輸出
Quick Start
- 首先在專案根目錄下建立 webpack.config.js
1 | $ node install --save-dev webpack |
Content in webpack.config.js
1 | module.exports = { |
- context:
- 要打包的檔案們所在的目錄
- 當有設定這個Property時, 之後所有要打包的檔案只需使用’./[檔案+附檔名]’即可
- entry:
- 設定JS的程式進入點
- Default為: ‘index.js’
- 當為物件時
- Key: 提供 output 的property參考, Value: 檔案Path
- 可以有多個進入點, 各自包成一個file
- 當為物件時
- output:
- 設定打包完後檔案放的路徑, 以及名稱
- 打包後檔案放的路徑
- path: [欲放置的路徑]
- default為 ./dist
- 打包後檔案名稱
- filename: [檔案的名稱]
- 可以動態設定檔案名稱, 依據 entry 中的key值
- e.g. filename: [name].bundle.js
- 打包後檔案放的路徑
- 設定打包完後檔案放的路徑, 以及名稱
- module:
- 設定所使用到的Loader
- Loader
- Pre processor of our code
- 由於Webpack只看得懂 JS, 因此對於一些其他資源(e.g. html, css, image … etc.), 再進入webpack core之前需要做一些preprocessing
- 一個物件, 主要有兩個屬性
- test:
- 以正規表達式說明目標副檔名
- use:
- 使用哪個Loader
- style-loader: Transform CSS into modules
- css-loader: Then add \<style> in DOM
- 常用的loader
- babel-loader
- css-loader/style-loader
- image-loader
- value為一個陣列, 且有順序性
- test:
- Pre processor of our code
1 | // 先執行css-loader後, 才執行style-loader |
- plugins:
- Post processor of our code
- e.g.
- Uglify … etc.
Some Tips
- Vendor bundling
- 使用情境
- 當某一個module使用多次(被多個我們自己寫的file reference到)時, 我們希望只pack一份就好(而不是我們的每個file都pack一次這個module) .
- 在watch mode下, 我們不需要一直去build我們用到的外部module(e.g. lodash), 我們只需重新build「我們自己寫」的部分
- Vendor bundling
- 將那些「我們多次使用」或是「完全不會再更動的外部module」獨立打包「一次」,之後就不會再更動它了
- 優點
- Speed up loading
- Speed up bundling(在包第一次之後)
- Usage
- 使用情境
1 | // In webpack.config.js |
- Aliasing the path
- 把路徑Alias成一個變數
- 當資料夾結構改變時, 只要到config更改一次, 不用到每個用到該路徑source code更動
1 | // in webpack.config.js |
1 | // in index.js |
- webpack-dev-server
- 一個webpack提供開發時使用的server
- Live Reload
- Hot Module Replacement(HMR)
- 只重新load我們有修改的部分, 也就是不重新load「整個」頁面 .
- Usage
- 一個webpack提供開發時使用的server
1 | $ npm install --save-dev webpack-dev-server |
1 | // in package.json |
Webpack 4 - Dev mode / production mode setting in CLI
- 可以透過CLI指令來設定development mode或production mode
development mode
Usage
1
$ webpack --mode development
可以搭配 webpack-dev-server 使用
- Development mode on the other hand is optimized for speed and does nothing more than providing an un-minified bundle.
production mode
Usage
1
$ webpack --mode development
Production mode enables all sorts of optimizations out of the box. Including minification, scope hoisting, tree-shaking and more.
HTML / CSS with webpack
Sample set up for webpack
1 | $ npm install --save-dev webpack webpack-cli webpack-dev-server |
1 | \\ in package.json |
1 |
|