Using Configurations and Options
HyperRedStart
Posted on April 12, 2022
這個章節會介紹到基本的 webpack config 設定的實際使用,透過設定的層層疊加,並討論組態設定、資源管理、輸出管理、對 webpack 的設定。
💈 基本 Webpack Config 設定指南 💈
1. 使用不同的設定檔
在 package.json 中指定 webpack config 的設定檔案名稱
"scripts": {"build": "webpack --config example.config.js" }
2. 設定模組選項
mode 可以針對不同的輸出模式進行優話
entry 預設為 src 底下目錄,代表開始封裝的起始目錄位置
const path = require('path');
module.exports = {
mode: "production", // "production" | "development" | "none"
entry: "./app/entry", // string | object | array
3. 輸出選項
設定輸出路徑,輸出檔案名稱,以及公共路徑位置,library 設定輸出給其他第三方的名稱,libraryTarget 可以指定引用語句類型
output: {
path: path.resolve(__dirname, "dist"), // string
filename: "bundle.js", // string
publicPath: "/assets/", // string
library: "MyLibrary", // string,
libraryTarget: "umd", // universal module definition
},
4. 引用檔案名稱規則
設定模組內需要引用的檔案規則,可以引入指定目錄,或是將其排除
module: {
rules: [{
test: /\.jsx?$/,
include: [ path.resolve(__dirname, "app") ],
exclude: [
path.resolve(__dirname, "app/demo-files")
],
5. enforce / issuer
issuer 指定支援的使用,如 svg 檔案可讓 js 副檔名的檔案,進行加載
{
test: /\.svg(\?.*)?$/,
issuer: /\.js$/,
loader: 'svg-inline-loader'
}
設定 enforce 指定載入順序
- pre 優先
- normal 正常
- inline 其次
- post 最後
enforce: "pre" | enforce: "post"
6. performance
限制效能警告
當檔案過大造成效能頻緊時,提出緊告
performance: {
hints: "warning", // enum
maxAssetSize: 200000, // int (in bytes),
maxEntrypointSize: 400000, // int (in bytes)
assetFilter: function(assetFilename) {
return assetFilename.endsWith('.css') || assetFilename.endsWith('.js');
}
7. devServer
設定啟動開發測試環境,實現 Live Reload
devServer: {
proxy: { '/api':'http://localhost:3000' },
contentBase: path.join(__dirname, 'public'),
compress: true,
historyApiFallback: true,
hot: true,
https: false,
noInfo: true,
},
運行 server
npx webpack serve
資源管理
CSS / Image / woff 資源檔案
安裝資源載入相應套件
npm install --save-dev style-loader css-loader file-loader
📚 設定資源載入套件
module: {
rules: [{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}, {
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader']
}, {
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: ['file-loader']
}
]}
載入後就可以在js中透過import 加載資源檔
import './style.css';
import Icon from './icon.png';
CSS 中加載字型
@font-face {
font-family: 'SampleFont';
src: url('./sample-font.woff2') format('woff2'),
url('./sample-font.woff') format('woff');
}
JSON/ CSV / XML 資源檔案
除了一般的 CSS / 圖檔以外,也可以載入文字資源檔
安裝資源載入相應套件
npm install --save-dev csv-loader xml-loader
設定資源載入
{
test: /\.(csv|tsv)$/,
use: ['csv-loader']
},
{
test: /\.xml$/,
use: ['xml-loader']
}
載入資源
import Data from './data.xml';
HtmlWebpackPlugin
使用 html plugin 透過 webpack.config.js 來設定 html內容
npm install --save-dev html-webpack-plugin
ex: 設定網頁 title
const HtmlWebpackPlugin = require('html-webpack-plugin');
plugins: [
new HtmlWebpackPlugin({
title: 'Output Management'
}
)]
清除發布目錄
在開發中我們輸出至dist的目錄內,可能會有很多殘留檔案,可以透過以下工具,清理目錄內容
npm install --save-dev clean-webpack-plugin
const CleanWebpackPlugin = require('clean-webpack-plugin');
plugins: [
new CleanWebpackPlugin(),
],
Bail
Bail 參數設定為布林值,會強迫 Webpack 在編譯中發生錯誤問題後,立刻終止
module.exports = {bail: true};
其他介紹的屬性參數
- profile : 布林屬性,提供分析資料,可使用 https://webpack.github.io/analyse/ 進行分析
- parallelism : 正整數並行數量,透過並行的方式執行各個模組
- recordsPath:字串路徑,紀錄code splitting 跨檔案之間的關聯,以便確保緩存(Cahching)行為能正常再分散的檔案中。
第三章節 Using Configurations and Options 結束 🎉
第四章會介紹更多的第三方 Webpack 套件,指導我們如何應用 Webpack 整合各式的開發工具,以及使用 Webpack 進行各種複雜的建置設定。
Posted on April 12, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.