前言: 我们在平常本地开发时,可能经常需要与后端进行联调,或者调用一些api,但是由于浏览器跨域的限制、开发与生产环境的差异、http与https等问题经常让联调的过程不够顺畅。所以本文介绍一下webpack的devServer中的proxy配置项。接下来让我们先看一下这个配置项的基本使用:


基本使用

  1. 基本代理配置:如果你有一个在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
  1. 路径重写:如果你不希望在代理请求时传递原始路径(例如/api),可以使用pathRewrite来重写它。这里的^/api: ''的意思是匹配接口路径中的/api,并将其替换为空字符串
  • 在这个例子中,任何以 /api 开头的请求路径在转发之前都会将 /api 部分替换为空字符串。例如,如果你发起一个请求到 /api/users,那么实际发送到后端服务器的请求路径将是 /users。
  • ^:匹配字符串的开始部分。
  • target 是后端的地址
  • 最后的请求路径会是:http://localhost:3000/users
    proxy: {
    '/api': {
    target: 'http://localhost:3000',
    pathRewrite: { '^/api': '' },
    },
    }
  1. 处理HTTPS和无效证书:默认情况下,代理不会接受运行在HTTPS上且证书无效的后端服务器。要允许这样的配置,可以将secure选项设置为false

    proxy: {
    '/api': {
    target: 'https://other-server.example.com',
    secure: false,
    },
    }
  2. 条件代理:通过一个函数判断是否需要代理。例如,对于浏览器请求,你可能希望提供一个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';
    }
    },
    },
    }
  3. 多路径代理:如果你想将多个特定路径代理到同一个目标,可以使用具有context属性的对象数组。

    proxy: [
    {
    context: ['/auth', '/api'],
    target: 'http://localhost:3000',
    },
    ]
  4. 改变原始主机头:代理默认保持原始的主机头。如果需要,可以通过设置changeOrigintrue来改变这个行为。

    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
]
}
};

在这个配置中:

  1. entryoutput 分别配置了入口和输出文件。

  2. devServer 是开发服务器的配置:

    • contentBase 指定了静态文件的位置。
    • compress 开启 gzip 压缩。
    • port 设置开发服务器的端口为 9000。
  3. devServer.proxy 是重要的代理配置部分:

    • 针对任何以 /api 开始的请求,代理规则会将请求转发到 http://localhost:3000 上。
    • pathRewrite 将路径中的 /api 替换为空字符串,这意味着例如 /api/user 会被转发为 http://localhost:3000/user
    • secure: false 表示接受对 https 的代理,这在目标服务器使用自签名证书时很有用。
    • changeOrigin: true 用于控制 Host 头的值。如果为 trueHost 头会被修改为目标 URL 的主机名。
  4. pluginsmodule 分别用于配置 Webpack 插件和模块加载器。

Webpack.devServer 配置项如何使用?附devServer完整示例的更多相关文章

  1. 深入浅出的webpack构建工具---DevServer配置项(二)

    深入浅出的webpack构建工具---DevServer配置项(二) 阅读目录 DevServer配置项 1. contentBase 2. port 3. host 4. headers 5. hi ...

  2. webpack devServer配置项的坑

    本文所用webpack版本为4+,阅读本章的同学请注意区分. webpack默认不需要配置文件 但是你仍可在项目的node_module目录同级目录建立一个webpack.config.js文件进行配 ...

  3. vue-cli的webpack模版项目配置解析-build/dev-server.js

    我们在使用vue-cli搭建vuejs项目(Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目)的时候,会自动生成一系列文件,其中就包含webpack配置文件.我们现在来看下,这些配置到 ...

  4. 自动红眼移除算法 附c++完整代码

    说起红眼算法,这个话题非常古老了. 百度百科上的描述: "红眼"一般是指在人物摄影时,当闪光灯照射到人眼的时候,瞳孔放大而产生的视网膜泛红现象. 由于红眼现象的程度是根据拍摄对象色 ...

  5. c语言智能指针 附完整示例代码

    是的,你没有看错, 不是c++不是c#, 就是你认识的那个c语言. 在很长一段时间里,c的内存管理问题, 层出不穷,不是编写的时候特别费劲繁琐, 就是碰到内存泄漏排查的各种困难, 特别在多线程环境下, ...

  6. Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)

     Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...

  7. springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置

    Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...

  8. cxf-webservice完整示例

    最近一段时间研究webservice,一般来说,开发java的Webservice经常使用axis2和cxf这两个比较流行的框架 先使用cxf,开发一个完整示例,方便对webservice有一个整体的 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. WCF服务开发与调用的完整示例

    WCF服务开发与调用的完整示例 开发工具:VS2008 开发语言:C# 开发内容:简单的权限管理系统 第一步.建立WCF服务库 点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IServi ...

随机推荐

  1. 你可得知道物理地址与IP地址

    来看看计算机网络中这些常见的概念你有没有理解~ 物理地址 表示方式 物理地址即mac地址,每个网卡都有6字节的唯一标识,前三个字节表示厂商,后三个字节由厂商随机分配. 如何查看 在 command 中 ...

  2. 从壹开始前后端开发【.Net6+Vue3】

    项目名称:KeepGoing(继续前进) 1.1介绍 工作后,学习的脚步一直停停走走,希望可以以此项目为基础,可以不断的迫使自己不断的学习以及成长 将以Girvs框架为基础,从壹开始二次开发一个前后端 ...

  3. SpringBoot 笔记

    SpringBoot 笔记 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用应该是一组小型服 ...

  4. Deep Transfer Learning综述阅读笔记

    这是一篇linkedin发表的深度迁移学习综述, 里面讲了一些对于search/recommend system中的迁移学习应用. 有不少指导性的方法, 看完后摘录出来 对于ranking方向的TL, ...

  5. Microsoft Build 2021大会开始后,Develop Blog一系列更新

    .NET BLOG 发布.NET 6预览版4 https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4/ 发布.NET MAUI ...

  6. 关于Teamcenter RAC开发如何查看Soa调用情况,已经查看反编译源码

  7. 【matplotlib 实战】--堆叠面积图

    堆叠面积图和面积图都是用于展示数据随时间变化趋势的统计图表,但它们的特点有所不同.面积图的特点在于它能够直观地展示数量之间的关系,而且不需要标注数据点,可以轻松地观察数据的变化趋势.而堆叠面积图则更适 ...

  8. 整理php防注入和XSS攻击通用过滤

    对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlsp ...

  9. 【算法】国庆加班,火锅与Linq.AddRange的奇妙螺旋

    在国庆假期的一个傍晚,小悦正在家中享受火锅美食.她嘴里咀嚼着鲜嫩的牛肉,脸上洋溢着满足的微笑.突然,手机铃声响起,打破了这温馨的氛围.她拿起手机一看,是公司打来的电话. "小悦,有个紧急的项 ...

  10. 如何在linux(Ubuntu)下安装unity(Unity engine游戏引擎)

    如果直接从unity官网下载unityhub的deb包,直接安装有可能出现unityhub打不开/打开缓慢/无法登陆/无法申请密钥等问题. 正解:从Unity官方源下载unity 1.先添加unity ...