大家好,我是若川,今天推荐腾讯前端团队的这篇好文。


whistle 是一个基于 Node.js 的跨平台网络调试工具。最近随着 Nohost 的开源,有不少同学问了 whistle 相关的问题,本篇文章将结合几个常见的业务场景介绍如何在本地前端项目开发中使用 whistle 。

一、使用webpack devServer的项目

项目准备

如今,大部分的前端项目是以 webpack 作为开发和构建工具进行项目开发的。我们将以这样一个最常见的场景,即以 webpack 开启本地 devServer 进行开发和调试的方式,展示如何在这样的前端项目中结合使用 whistle 。

我们以一个 create-react-app 开启的项目为事例来进行展示。首先,假定有一个以 create-react-app 新建的,名为 my-app 的前端项目:

create-react-app my-app
cd my-app
npm run start

会在浏览器中开启一个 localhost:3000 的 tab,这是我们常见的一个本地前端开发的场景。

本地 host 的弊端

一般情况下,我们可以直接在 localhost 下进行本地的调试开发。但是,基于 localhost 的本地开发有不少局限性:

  • 用户身份相关的部分功能,如登陆功能,cookie 读取等对客户端的域名有限制,使用 localhost 这个 host 可能会遇到限制。

  • 使用 localhost 进行本地开发,业务代码中可能需要进行一些额外的逻辑判断,如针对本地域名和线上域名做行为区分等。

配置 whistle

为了解决上述问题,根据我们的实践经验,本地开发时,通过线上真实域名访问本地前端项目,似乎是一种更加有效的开发方式。

假设我们这个本地项目的线上真实域名为 qq.ketang.com ,则我们的目标即是通过 qq.ketang.com 访问和调试本地的 my-app 前端项目。

下面我们将演示如何使用 whistle 实现这个目标操作。

1、配置 whistle 规则

打开 whsitle 的规则配置地址 127.0.0.1:8899 , 依次进行如下操作:

-> 选择 Rules 选项卡

-> 双击开启 Default 配置(其后方出现绿色的打勾即为开启成功)

-> 在右侧规则编辑面板中输入以下规则

qq.ketang.com/  http://127.0.0.1:3000/

-> 选择 Save

2、启用 proxy

选择 SwitchyOmega 插件的 proxy 模式

随后,在浏览器中访问地址 https://qq.ketang.com, 就能成功访问到我们本地的 my-app 项目了。

现在,我们就可以用项目的线上地址来调试本地项目,而不用使用 127.0.0.1:3000 这样的本地地址了。

whislte 做了什么

这其实是 whislte 中的配置规则起了作用

qq.ketang.com/  http://127.0.0.1:3000/

这条规则将所有 qq.ketang.com/及其子路径下的请求转发到了http://127.0.0.1:3000/下。

whistle 的强大功能之一就是提供了各种模式的规则匹配以应对前端开发中的不同场景,上面这条,只是一条最简单的规则。

如果你想现在就对 whistle 的配置规则有个更全面和清晰的认识,可以参考以下链接:

# whistle 配置方式
https://wproxy.org/whistle/mode.html# whistle 规则的模式匹配
http://wproxy.org/whistle/pattern.html

即使你有没细细翻阅又或者没有很好地理解 whistle 的配置规则也没关系,下面我们将继续以这个项目为例,结合几个常见的开发场景,告诉开发者应该如何配置常见的 whislte 规则。

忽略子路径下的 cgi 接口转发

在我们的 my-app 项目中,如果项目中涉及到同域下子路径的后端接口,如qq.ketang.com/cgi-proxy/xxxxx ,我们的初衷是 cgi 接口不需要转发,依然走线上即可。

但是如果按照目前的配置,该 cgi 接口也会被转发至本地的相应路径,这显然不是我们希望看到的结果。

# bad, 不是我们所希望的
# qq.ketang.com/cgi-proxy/xxxxx 也会转发至 http://127.0.0.1:3000/cgi-proxy/xxxx
qq.ketang.com/  http://127.0.0.1:3000/

此处需要使用 excludeFilter 规则:

# good,使用excludeFilter规则, 路径匹配
# qq.ketang.com/cgi-proxy/ 及其子路径下的请求不会被转发至 http://127.0.0.1:3000/cgi-proxy/
qq.ketang.com/  http://127.0.0.1:3000/ excludeFilter://qq.ketang.com/cgi-proxy/

以上我们在 excludeFilter 里采取的是路径匹配,此外我们还可以采取通配符匹配或者正则匹配来实现这一功能:

# also good, 使用excludeFilter规则, 通配符匹配
# qq.ketang.com/cgi-proxy/, qq.ketang.com/cgi-bin/ ... 这类的请求都不会被转发
qq.ketang.com/  http://127.0.0.1:3000/ excludeFilter://^qq.ketang.com/cgi-*
# also good, 使用excludeFilter规则, 正则匹配
# qq.ketang.com/cgi-proxy/, qq.ketang.com/cgi-bin/ ... 这类的请求都不会被转发
qq.ketang.com/  http://127.0.0.1:3000/ excludeFilter:///^\w+://qq\.ketang\.com/cgi-/

有读者可能会疑惑,为什么以上正则匹配中的//qq 的//没有转义,这是因为在 whistle 内部实际上是调用了new RegExp 的方式进行构造正则,已经自动做了转义,如果不放心,那么写成 //qq 也可以。

关于模式匹配的具体规则可以参考官方文档:

# whistle 规则的模式匹配
http://wproxy.org/whistle/pattern.html

特定 cgi 接口的 mock

一个常见的场景是我们需要对某个 cgi 接口的返回数据进行改造以模拟前端的多种 case ,whistle 有多种方式可以帮助开发者实现该功能。

假设有一个 cgi 接口路径为/cgi-proxy/getMyName, 则本地 mock 的方式有

  • 以本地文件作为响应

# qq.ketang.com/cgi-proxy/getMyName 以本地的//User/dug/test/getMyName.json文件作为响应,
qq.ketang.com/cgi-proxy/getMyName  file:///User/dug/data/getMyName.json
  • 编辑在线文件作为响应

    如果不想用本地文件,也可以直接用 whistle 提供的在线文本功能。在 whislte  的配置界面中:

->选择 “Values”

->点击 “Create”, 输入自定义的文件名(此处为ans.json)

->选中新建的文件,在右侧的编辑栏中输入作为响应的内容

# qq.ketang.com/cgi-proxy/getMyName 以Values面板中的ans.json作为响应
qq.ketang.com/cgi-proxy/getMyName  file://{ans.json}
  • 使用 xfile 模式

xfile 模式和上述的 file 模式功能基本一致,xfile 和 file 的唯一区别是 file 找不到对应文件返回404,而xfile则是继续请求线上资源。

# xfile和file基本功能一致,只是若找不到对应文件,xfile将会继续请求线上资源
qq.ketang.com/cgi-proxy/getMyName  xfile://{ans.json}

二、无构建工具的传统前端项目

不少老的项目由于种种原因没有使用构建工具来构建前端 JS,CSS 等前端资源。对于这种项目,我们希望用本地的对应资源来进行开发和调试。

比如,在我们现在需要对一个老项目进行迭代,项目的线上域名为qq.ketang.com, 这次改动主要涉及到以下两个文件:

<!-- index.html -->
...<link rel="stylesheet" href="/assets/css/main.css" type="text/css">
...
<script src='assets/js/module/my.js'>

在 whislte 中,我们需要配置规则:

# 分别将线上的css和js的访问 指向本机的项目路径qq.ketang.com/assets/css/ xfile:///User/dug/myWork/ketang_pro/assets/css/qq.ketang.com/assets/js/  xfile:///User/dug/myWork/ketang_pro/assets/js/

之后,我们在浏览器访问 qq.ketang.com,其中对于/assets/css/ 和/assets/js/路径下的请求将会以本地项目目录下的对应文件响应,然后我们就能在本地修改和调试项目代码了。

三、以插件支持特殊的需求场景

有一些特殊的应用场景,依靠 whistle 的基础功能可能无法实现。

但是,whistle 支持自定义插件来拓展功能,同时社区也有一些插件的积累。

例如,假设项目中有一个 combo 的 url 请求为http://i.cdn.com/??x.js,y.js,z.js 。通过社区的 whistle.combo 插件可以实现将 combo url 切割成数组[x.js, y.js, z.js]并分别组合成 http://i.cdn.com/x.js, http://i.cdn.com/y.js, http://i.cdn.com/z.js

关于插件 whistle.combo 详见

# whisle.combo
https://github.com/whistle-plugins/whistle.combo

另外,这里有一份 whistle 的插件集合,可以在里面搜寻是否有满足自己需求的插件。

# whislte 插件列表
https://github.com/whistle-plugins

更多关于 Nohost 的信息请点击“阅读原文”。


常驻推荐阅读

若川知乎高赞:有哪些必看的 JS库?
我在阿里招前端,我该怎么帮你?(现在还可以加模拟面试群)
如何拿下阿里巴巴 P6 的前端 Offer
如何准备阿里P6/P7前端面试--项目经历准备篇
大厂面试官常问的亮点,该如何做出?
如何从初级到专家(P4-P7)打破成长瓶颈和有效突破
若川知乎问答:2年前端经验,做的项目没什么技术含量,怎么办?

常驻末尾

你好,我是若川,江西人~(点击蓝字了解我)历时一年只写了一个学习源码整体架构系列 有哪些必看的JS库:jQuery、underscore、lodash、sentry、vuex、axios、koa、redux

  1. 关注若川视野,回复"pdf" 领取优质前端书籍pdf,回复"1",可加群长期交流学习

  2. 我的博客地址:https://lxchuan12.gitee.io 欢迎收藏

  3. 觉得文章不错,可以 分享、点赞、在看 呀^_^另外欢迎留言交流~

小提醒:若川视野公众号面试、源码等文章合集在菜单栏中间【源码精选】按钮,欢迎点击阅读,也可以星标我的公众号,便于查找

手把手教你接入前端热门抓包神器 - whistle相关推荐

  1. 软件测试 | 手把手教你如何使用 Charles 抓包工具(电脑+手机端)

    软件测试 | 手把手教你如何使用 Charles 抓包工具(电脑+手机端) 一.Charles简介 二.Charles下载与安装 三.Charles配置 (1)Charles-PC端的配置如下: (2 ...

  2. 软件测试 | 手把手教你如何使用 Fiddler 抓包工具(电脑+手机端)

    嘿.大家好,我是4U: 做过 APP 测试的同学都会接触抓包工具,通过抓包工具可以获取到客户端与服务端接口的交互数据,在实际测试APP的过程中,我们往往会发现服务端返回 的参数字段错误.数据统计错误等 ...

  3. 【干货】手把手教你如何使用Charles抓包

    一.为什么使用charles 前几天因为需要通过抓包定位问题,打开了尘封已久的fiddler,结果打开软件后什么也干不了,别说手机抓包了,打开软件什么请求也抓不到.很多时候都是如此,如果一个方案不行, ...

  4. 手把手教你如何使用Charles抓包

    目录 一.为什么使用charles 二.下载地址 三.web抓包 四.App抓包 五.Charles过滤 六.弱网测试 七.打断点篡改数据 八.修改请求数据 九.重复发送请求 一.为什么使用charl ...

  5. 实战|手把手教你如何使用抓包神器MitmProxy

    大家好,我是阿辰,今天教大家如何使用MitmProxy抓包工具. 玩爬虫的小伙伴都知道,抓包工具除了MitmProxy外,还有Fiddler.Charles以及浏览器netwrok等 既然都有这么多抓 ...

  6. [实战]前端wireshark抓包协议解密

    前端wireshark抓包协议解密 废话不多说,先看看结果 该JSON文件是通过解密后的 HTTP 返回response结果再解密打开的新页面 有兴趣的小伙伴了解下之前的文章 Sha384解密[2] ...

  7. 从零开始社区之路,手把手教你开源自己的Python包

    2019独角兽企业重金招聘Python工程师标准>>> 要融入社区,第一步当然是要撰写一个自己的包.整个过程主要分为五步: 项目创建 搭建虚拟运行环境 编写项目代码 编写安装脚本 上 ...

  8. 移动端前端抓包神器详解(whistle+weinre)

    移动端线上代码调试工具,针对测试环境的或者开发环境,还可以打vconsole可以查看,但是线上代码如果有问题,没办法去打vconsole,此款抓包神器可以解决这个问题 有耐心的同学可以查看官网文档:快 ...

  9. 卧槽!两大抓包神器的视频教程来啦!

    应读者的要求整理了两大抓包神器:Fiddler和Wireshark的视频教程!也是费了不少劲才整理出来的,要不是看读者是个妹子小白,我才懒的整理.哈哈!说来你们也是沾妹子的光!有需要的抓紧保存吧!无论 ...

最新文章

  1. STM32F103 与 STM32F407引脚兼容问题
  2. JS服务器端开发基础篇(Array.slice方法和splice方法)
  3. Pinterest从OpenTSDB切换到他们自己的时间序列数据库
  4. php 实现 html转js
  5. 20175330 数据结构-排序(选做)
  6. 【树莓派】首发树莓派4原型机接口参数曝光
  7. arry-718 Maximum Length of Repeated Subarray
  8. 1759: 多少个元素比它大 二分
  9. .NET程序员面试指南:解释委托的基本原理
  10. PHP中的的一个挺好用的函数 array_chunk
  11. Rancher快速入门
  12. abaqus中的e11 e22_abaqus帮助文档翻译 2.1.11 一摞积木在通用接触下的倒塌分析...
  13. hdu 3966 树链剖分
  14. PhotoBulk for Mac v2.3 图片批量调整重命名转换水印工具
  15. 如何在面试中回答「你最大的缺点是什么」?
  16. GO connectex: A connection attempt failed because the connected party did not properly respond 已解决
  17. 同事之间都有哪些潜规则?
  18. 什么是纯函数?使用纯函数有什么好处?
  19. 天子呼来不上船,自称臣是酒中仙——我的嗜酒情节
  20. win2012 文件服务器 双机热备,Windows Server 2012 R2 DHCP服务器双机热备、负载均衡

热门文章

  1. springboot打war包汇总
  2. java中方法的参数传递机制
  3. linux 安装软件的几种方法
  4. UEditor 插入图片大于2M提示文件大小超出范围解决办法
  5. POJ 2323 贪心
  6. 幂等和高并发在电商系统中的使用
  7. Flex sdk4 布局与更新
  8. listen(int fd, int backlog)中的backlog含义
  9. 女人跳槽:最重要的是你的独立,你的快乐
  10. Uboot初次编译、烧写、启动(启动界面log简析)