# Webpack Config
每次的編輯和儲存後,都需要再輸入 webpack ./xx.js 重新編譯,這樣的動作我們可以藉由新增一個設定檔 webpack.config.js,讓每次只需要輸入 webpack 不帶其他參數,Webpack 就會去讀取 webpack.config.js 中的設定。
# 設定 webpack.config.js
首先在專案中建立 webpack.config.js 檔案,並寫入下方的內容:
const path = require('path');
module.exports = {
context: path.resolve(__dirname, 'src'),
entry: './app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js',
},
watch: true,
};
2
3
4
5
6
7
8
9
10
11
# 屬性的解釋
module.exports- CommonJS 的模組化語法,意思是module.exports這個物件所帶值context- 會取得專案中src資料夾的絕對路徑,讓讀取檔案的預設位置為src資料夾entry- 代表著編譯前檔案的檔名,這邊使用./app.js,代表執行webpack這個指令時,會用同個路徑底下的app.js來進行編譯output- 代表編譯後輸出的檔名,這裡webpack分成path和filename兩個欄位做設定path- 編譯結果的路徑,注意,這裡需要使用 絕對路徑。在 Node.js 裡有個__dirname變數可以取得絕對路徑,並用path.resolve()來把相對路徑轉換成絕對路徑filename- 編譯結果的檔名
watch- 儲存時自動編譯
# 使用特定的設定檔
如果有多個 Webpack 設定檔,可以使用 --config 後面接設定檔檔名。
$ webpack --config webpack.production.js
# 依環境變數打包程式
# 設定 mode 屬性
直接於 webpack.config.js 中設定 mode 屬性:
module.exports = {
mode: 'development',
};
2
3
# 使用 --mode 參數
在 package.json 的 scripts 中設定:
{
"scripts": {
"start": "webpack --mode development",
"build": "webpack --mode production"
}
}
2
3
4
5
6
# 使用 cross-env 套件
安裝
cross-env,並在package.json的scripts中加上:{ "scripts": { "dev": "cross-env NODE_ENV=development webpack --watch", "build": "cross-env NODE_ENV=production webpack" } }1
2
3
4
5
6webpack.config.js中加入mode屬性:module.exports = { mode: process.env.NODE_ENV, };1
2
3
使用 cross-env 套件的優點,可以在 Node.js 的環境中,透過 process.env.NODE_ENV 取得環境變數。
minify 編譯結果:
development
asset main.js 12 KiB [emitted] (name: main)
asset build_js.main.js 1.43 KiB [emitted]
runtime modules 6.58 KiB 9 modules
2
3
production
asset main.js 2.56 KiB [emitted] [minimized] (name: main)
asset 62.main.js 162 bytes [emitted] [minimized]
runtime modules 6.58 KiB 9 modules
2
3
# 參考
← 初探 Webpack CSS Module →