Webpack
中文:
DevServer | webpack 中文文档
chapter
├─babel.config.js
├─package-lock.json
├─package.json
├─postcss.config.js
├─webpack.config.js
├─src
| ├─index.html
| └index.js
⚠️ 注意
devServer.proxy
只能在开发环境使用
proxy
当我们在开发需要请求一个接口的时候需要后端提供一个接口地址,就像这样:
// 使用 axios 对接口进行请求
import axios from "axios";
import React, { Component } from "react";
import ReactDom from "react-dom";
class App extends Component {
componentDidMount(){
axios.get("/react/api/header.json").then(res=>{
console.log(res)
})
}
render() {
return <div>Hello Word!</div>
}
}
ReactDom.render(<App />,document.getElementById("root"));
但是这样显然不是很合理,我们都知道在我们进行接口联调的时候接口地址是分为「测试环境」和「线上环境」的,如果这样把路径直接写到代码中不利于我们进行修改,那么如何进行配置实现请求转发呢?
配置devServer.proxy
:
module.exports = {
mode: "development",
devtool: "eval-cheap-module-source-map",
contentBase: "./dist",
open: true,
hot: true,
hotOnly: true,
// 当接口遇到 /react/api 开头就转发到 http://www.dell-lee.com 作为前缀
proxy: {
"/react/api": "http://www.dell-lee.com"
},
// ...
}
这样就能看到header.json
的数据啦。
proxy.pathRewrite
假设现有有个场景,后端说:我现在header.json
的接口还没有开发完成,你先使用demo.json
接口。
这个时候我们就能在代码中直接将header.json
改成demo.json
的接口。
axios.get("/react/api/dem.json").then(res=>{
console.log(res)
})
但这样后期接口开发完成我还需要带业务代码中进行查找然后进行修改,如何能做到修改配置文件就可以做到接口请求到demp.json
呢?
配置devserver.pathRewrite
:
module.exports = {
mode: "development",
devtool: "eval-cheap-module-source-map",
contentBase: "./dist",
open: true,
hot: true,
hotOnly: true,
// 当接口遇到 /react/api 开头就转发到 http://www.dell-lee.com 作为前缀
proxy: {
"/react/api": {
target: "http://www.dell-lee.com",
// 将 header.json 更改为 dome.json
pathRewrite: {
"header.json": "demo.json"
}
}
}
},
module: {
// ...
},
// ...
}
这样我们就能请求到demo.json
接口啦(虽然network
显示的路径还是header.json
但实际请求到的是demo.json
路径)。
更多的配置项:
1、devServer.proxy
DevServer | webpack 中文文档
2、http-proxy-middleware
GitHub - chimurai/http-proxy-middleware: The one-liner node.js http-proxy middleware for connect, express, next.js and more