Webpack.devServer 配置项如何使用?附devServer完整示例
生活随笔
收集整理的這篇文章主要介紹了
Webpack.devServer 配置项如何使用?附devServer完整示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言: 我們在平常本地開發時,可能經常需要與后端進行聯調,或者調用一些api,但是由于瀏覽器跨域的限制、開發與生產環境的差異、http與https等問題經常讓聯調的過程不夠順暢。所以本文介紹一下webpack的devServer中的proxy配置項。接下來讓我們先看一下這個配置項的基本使用:
基本使用
-
基本代理配置:如果你有一個在
localhost:3000上的后端,你可以通過簡單的配置將/api路由代理到這個后端服務器。webpack會對所有本地發出的前綴為/api的請求,轉發到localhost:3000
proxy: {
'/api': 'http://localhost:3000',
}
// 示例
// 假設你本地的前端服務跑在8080端口
axios.get('/api/user/info') // 會被轉發到 -> localhost:3000/api/user/info
axios.get('/user/info') // 不會被轉發, localhost:8080/user/info
-
路徑重寫:如果你不希望在代理請求時傳遞原始路徑(例如
/api),可以使用pathRewrite來重寫它。這里的^/api: ''的意思是匹配接口路徑中的/api,并將其替換為空字符串
- 在這個例子中,任何以 /api 開頭的請求路徑在轉發之前都會將 /api 部分替換為空字符串。例如,如果你發起一個請求到 /api/users,那么實際發送到后端服務器的請求路徑將是 /users。
- ^:匹配字符串的開始部分。
- target 是后端的地址
- 最后的請求路徑會是:http://localhost:3000/users
proxy: { '/api': { target: 'http://localhost:3000', pathRewrite: { '^/api': '' }, }, }
-
處理HTTPS和無效證書:默認情況下,代理不會接受運行在HTTPS上且證書無效的后端服務器。要允許這樣的配置,可以將
secure選項設置為false。proxy: { '/api': { target: 'https://other-server.example.com', secure: false, }, } -
條件代理:通過一個函數判斷是否需要代理。例如,對于瀏覽器請求,你可能希望提供一個HTML頁面,而對于API請求,則希望代理它。
proxy: { '/api': { target: 'http://localhost:3000', bypass: function (req, res, proxyOptions) { if (req.headers.accept.indexOf('html') !== -1) { console.log('Skipping proxy for browser request.'); return '/index.html'; } }, }, } -
多路徑代理:如果你想將多個特定路徑代理到同一個目標,可以使用具有
context屬性的對象數組。proxy: [ { context: ['/auth', '/api'], target: 'http://localhost:3000', }, ] -
改變原始主機頭:代理默認保持原始的主機頭。如果需要,可以通過設置
changeOrigin為true來改變這個行為。proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true, }, }
devServer配置示例
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
// 入口文件配置
entry: './src/index.js',
// 輸出文件配置
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
// 開發服務器配置
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 9000,
proxy: {
// 配置代理規則 '/api'
'/api': {
target: 'http://localhost:3000', // 目標服務器地址
pathRewrite: { '^/api': '' }, // 路徑重寫,將 '/api' 替換為 ''
secure: false, // 如果是 https 接口,需要配置為 true
changeOrigin: true // 需要虛擬托管站點
},
// 你可以在這里繼續添加更多的代理規則
}
},
// 插件配置
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
],
// 模塊配置
module: {
rules: [
// 在這里添加 loader
]
}
};
在這個配置中:
-
entry和output分別配置了入口和輸出文件。 -
devServer是開發服務器的配置:-
contentBase指定了靜態文件的位置。 -
compress開啟 gzip 壓縮。 -
port設置開發服務器的端口為 9000。
-
-
devServer.proxy是重要的代理配置部分:- 針對任何以
/api開始的請求,代理規則會將請求轉發到http://localhost:3000上。 -
pathRewrite將路徑中的/api替換為空字符串,這意味著例如/api/user會被轉發為http://localhost:3000/user。 -
secure: false表示接受對 https 的代理,這在目標服務器使用自簽名證書時很有用。 -
changeOrigin: true用于控制Host頭的值。如果為true,Host頭會被修改為目標 URL 的主機名。
- 針對任何以
-
plugins和module分別用于配置 Webpack 插件和模塊加載器。
總結
以上是生活随笔為你收集整理的Webpack.devServer 配置项如何使用?附devServer完整示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA中的函数接口,你都用过吗
- 下一篇: NEFU OJ Problem1485