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完整示例的更多相关文章
- 深入浅出的webpack构建工具---DevServer配置项(二)
深入浅出的webpack构建工具---DevServer配置项(二) 阅读目录 DevServer配置项 1. contentBase 2. port 3. host 4. headers 5. hi ...
- webpack devServer配置项的坑
本文所用webpack版本为4+,阅读本章的同学请注意区分. webpack默认不需要配置文件 但是你仍可在项目的node_module目录同级目录建立一个webpack.config.js文件进行配 ...
- vue-cli的webpack模版项目配置解析-build/dev-server.js
我们在使用vue-cli搭建vuejs项目(Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目)的时候,会自动生成一系列文件,其中就包含webpack配置文件.我们现在来看下,这些配置到 ...
- 自动红眼移除算法 附c++完整代码
说起红眼算法,这个话题非常古老了. 百度百科上的描述: "红眼"一般是指在人物摄影时,当闪光灯照射到人眼的时候,瞳孔放大而产生的视网膜泛红现象. 由于红眼现象的程度是根据拍摄对象色 ...
- c语言智能指针 附完整示例代码
是的,你没有看错, 不是c++不是c#, 就是你认识的那个c语言. 在很长一段时间里,c的内存管理问题, 层出不穷,不是编写的时候特别费劲繁琐, 就是碰到内存泄漏排查的各种困难, 特别在多线程环境下, ...
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- cxf-webservice完整示例
最近一段时间研究webservice,一般来说,开发java的Webservice经常使用axis2和cxf这两个比较流行的框架 先使用cxf,开发一个完整示例,方便对webservice有一个整体的 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- WCF服务开发与调用的完整示例
WCF服务开发与调用的完整示例 开发工具:VS2008 开发语言:C# 开发内容:简单的权限管理系统 第一步.建立WCF服务库 点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IServi ...
随机推荐
- Django: 'block' tag with name 'header' appears more than once
错误原因 在同一文件中,重复引用标签多次 解决方案: 删掉重复的标签即可.
- ubuntu 安装pip3 报错
运行命令 sudo apt install python3-pip 报错: 有几个软件包无法下载,要不运行apt-get update 或加上--fix-missing试试 输入命令: sudo ap ...
- Python3入门基础教程
引:此文是自己学习python过程中的笔记和总结,适合有语言基础的人快速了解python3和没基础的作为学习的大纲,了解学习的方向.知识点:笔记是从多本书和视频上学习后的整合版. (一)初识pytho ...
- [gin]数据解析和绑定
前言 go version: 1.18 本文主要包含JSON.Form.Uri.XML的数据解析与绑定. JSON数据解析与绑定 go代码 package main import ( "ne ...
- QTreeView自绘实现酷炫样式
本篇文章结合笔者的经历,介绍一种通过重写QTreeView绘制事件,使用QPainter来实现好看的列表的方式. 导语 Hi,各位读者朋友,大家好.相信大家在日常的工作中,经常会接触到QTreeVie ...
- 【译】Silverlight 不会消亡 XAML for Blazor 到来
Userware 正在使用早已消失的.令人怀念的微软 Silverlight Web 开发平台的遗留来支持其新的"XAML for Blazor"产品,该产品允许 .NET 开发人 ...
- Go Web项目结构 + 基础代码
Go Web工程 下面是项目的包图,可以通过包图来理清项目包的结构. Go Web工程 下面是项目的包图,可以通过包图来理清项目包的结构. 因为我是从Java转过来的,其实这种包的结构与Java的类似 ...
- xlwt写入excel时候的合并单元格
简单版 import xlwt workbook = xlwt.Workbook() worksheet = workbook.add_sheet('My sheet') # 合并第0行的第0列到第3 ...
- torch-1 tensor & optim
开个新坑, pytorch源码阅读-从python代码开始读起. torch/ 1.tensor.py 继承自torch._C._TensorBase , 包括各种操作,TODO:随后看cpp代码 _ ...
- 「codeforces - 1519E」Off by One
link. 点 \(A\) 与 \((0,0)\),\(B\) 共线的充要条件是 \(\frac{y_A}{x_A}=\frac{y_B}{x_B}\),即 \(k_{OA}=k_{OB}\).又考虑 ...