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 ...
 
随机推荐
- 你可得知道物理地址与IP地址
			
来看看计算机网络中这些常见的概念你有没有理解~ 物理地址 表示方式 物理地址即mac地址,每个网卡都有6字节的唯一标识,前三个字节表示厂商,后三个字节由厂商随机分配. 如何查看 在 command 中 ...
 - 从壹开始前后端开发【.Net6+Vue3】
			
项目名称:KeepGoing(继续前进) 1.1介绍 工作后,学习的脚步一直停停走走,希望可以以此项目为基础,可以不断的迫使自己不断的学习以及成长 将以Girvs框架为基础,从壹开始二次开发一个前后端 ...
 - SpringBoot 笔记
			
SpringBoot 笔记 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用应该是一组小型服 ...
 - Deep Transfer Learning综述阅读笔记
			
这是一篇linkedin发表的深度迁移学习综述, 里面讲了一些对于search/recommend system中的迁移学习应用. 有不少指导性的方法, 看完后摘录出来 对于ranking方向的TL, ...
 - Microsoft Build 2021大会开始后,Develop Blog一系列更新
			
.NET BLOG 发布.NET 6预览版4 https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4/ 发布.NET MAUI ...
 - 关于Teamcenter RAC开发如何查看Soa调用情况,已经查看反编译源码
 - 【matplotlib 实战】--堆叠面积图
			
堆叠面积图和面积图都是用于展示数据随时间变化趋势的统计图表,但它们的特点有所不同.面积图的特点在于它能够直观地展示数量之间的关系,而且不需要标注数据点,可以轻松地观察数据的变化趋势.而堆叠面积图则更适 ...
 - 整理php防注入和XSS攻击通用过滤
			
对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlsp ...
 - 【算法】国庆加班,火锅与Linq.AddRange的奇妙螺旋
			
在国庆假期的一个傍晚,小悦正在家中享受火锅美食.她嘴里咀嚼着鲜嫩的牛肉,脸上洋溢着满足的微笑.突然,手机铃声响起,打破了这温馨的氛围.她拿起手机一看,是公司打来的电话. "小悦,有个紧急的项 ...
 - 如何在linux(Ubuntu)下安装unity(Unity engine游戏引擎)
			
如果直接从unity官网下载unityhub的deb包,直接安装有可能出现unityhub打不开/打开缓慢/无法登陆/无法申请密钥等问题. 正解:从Unity官方源下载unity 1.先添加unity ...