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

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


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. 觉得文章不错,可以 分享、点赞、在看 呀^_^另外欢迎留言交流~

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 与 Vue 框架的设计思路大 PK

大家好&#xff0c;我是若川。今天分享一篇框架设计思路的好文。关于我 大家好我是花果山的大圣&#xff0c;今天很荣幸&#xff0c;有机会跟大家分享一下很多年轻人感兴趣的话题《 Vue 和 React 设计思想 PK》,个人水平有限&#xff0c;如果有理解不到位的请倾盆&#xff0c;大…

php foreach id是否存在数组_请纠正这 5 个 PHP 编码小陋习

在做过大量的代码审查后&#xff0c;我经常看到一些重复的错误&#xff0c;以下是纠正这些错误的方法。在循环之前测试数组是否为空$items [];// ...if (count($items) > 0) {foreach ($items as $item) {// process on $item ...}}foreach以及数组函数 (array_*) 可以处理…

1161转进制(C语言)

一&#xff1a;题目 二&#xff1a;思路分析 1.首先该题目让我们使用递归求十进制转其他进制 2.其次&#xff0c;我们要知道十进制转换为其他进制怎么转换&#xff0c;以例题所给的数据为例 由此图可以看出&#xff0c;十进制转换为其他进制&#xff0c;是辗转相除法&#xf…

应对无协议脱欧 葡萄牙机场将为英籍旅客设快速通道

中新网1月18日电 据台湾《联合报》援引英媒报道&#xff0c;英国首相特蕾莎•梅的脱欧协议遭下院否决后&#xff0c;英国无协议脱欧的可能性变大。葡萄牙总理科斯塔17日表示&#xff0c;里斯本当局正对机场开设特殊通道进行规划&#xff0c;使英国旅客无论英国最后如何脱欧&…

6轮字节前端校招面试经验分享

大家好&#xff0c;我是若川。最近金三银四&#xff0c;今天分享一篇字节前端校招面试经验的轻松好文&#xff0c;相信看完会有所收获。也欢迎点击下方卡片关注或者星标我的公众号若川视野因为我错过了2020年的秋招&#xff08;ps: 那时候连数据结构与算法都还没学完&#xff0…

斥资近1亿港元,小米二次回购

1月21日消息&#xff0c;小米集团发布公告称&#xff0c;公司于1月18日回购了984.96万股B类普通股股票&#xff0c;占已发行股份0.041%&#xff0c;平均价为每股B类股10.1527港元&#xff0c;总计斥资近1亿港元。 这也是继1月17日首次回购后&#xff0c;小米集团连续两日出手进…

ios macos_设计师可以从iOS 14和macOS Big Sur中学到什么?

ios macos重点 (Top highlight)With the introduction of iOS 14 and macOS Big Sur, we are the witness of the next big thing in UI Design. Changes are not so revolutionary like in iOS 7 years before, but they undoubtedly present the trend UI Designers will fol…

网页设计简约_简约网页设计的主要功能

网页设计简约重点 (Top highlight)Minimalism is synonymous with simplicity. Not quite. As the name suggests, minimalism is definitely not about opulent design. But the assumption that minimalism is design-less and plain is also wrong. Minimalism is simple ye…

Expo 2010 Japan Pavilion

^_^转载于:https://www.cnblogs.com/mmmhhhlll/archive/2010/04/16/1713680.html

深度对比学习Vue和React两大框架

作为国内应用最广的两个框架&#xff0c;Vue 和 React 是前端必须掌握的内容&#xff0c;也是面试的重点。但大多数读者都只擅长其中一个框架&#xff0c;当面试涉及到另一个框架的内容时&#xff0c;就答不好了。比如虚拟dom&#xff0c;两个框架中都有应用&#xff0c;面试官…

java rwd_面向任务的设计-不仅限于Mobile First和RWD

java rwdWe already know that majority of solutions should start with a design for smartphones, we know that all websites should be responsive. Now, it’s time to think about holistic solutions with specific tasks adapted to all kind of devices.我们已经知道…

HOJ 1015 Nearly prime numbers

代码 //Nearly prime number is an integer positive number for which it is possible //to find such primes P1 and P2 that given number is equal to P1*P2.#include <stdio.h>#include <stdlib.h>#include <math.h>//decide n whither is a nearly pri…

「前端工程化」该怎么理解?

大家好&#xff0c;我是若川。今天分享一篇「前端工程化」的好文。非广告&#xff0c;请放心阅读。可点击下方卡片关注我&#xff0c;或者查看系列文章。今天发文比较晚&#xff0c;以往都是定时早上7:30发文&#xff0c;也不知道是不是有点早。一.什么是前端工程&#xff1f;一…

figma下载_Figma和ProtoPie中的原型制作,比较

figma下载第1部分 (Part 1) Prototyping has never had such a high profile with a whole host of tools that now give you varying ability to realize your designs beyond their static UI and into a working usable thing. It’s fair to say that prototyping within t…

「前端组件化」该怎么理解?

大家好&#xff0c;我是若川。今天分享一篇关于「前端组件化」的好文。欢迎点击下方卡片关注我。以下是正文~这里我们一起来学习前端组件化的知识&#xff0c;而组件化在前端架构里面是最重要的一个部分。讲到前端架构&#xff0c;其实前端架构中最热门的就有两个话题&#xff…

大屏设计的视觉统一_视觉设计中的统一

大屏设计的视觉统一视觉设计的统一性是什么&#xff1f; (What is unity in visual design?) The concept of unity in visual design means a group of elements working together to create a greater whole. It means, as the clich goes: A whole that is greater than th…

跟着官方文档能学懂React Hooks就怪了

大家好&#xff0c;我是若川。今天分享一篇关于「React Hooks」的好文。欢迎点击下方卡片关注我。以下是正文~回想下你入门Hooks的过程&#xff0c;是不是经历过&#xff1a;类比ClassComponent的生命周期&#xff0c;学习Hooks的执行时机慢慢熟练以后&#xff0c;发现Hooks的执…

origin图上显示数据标签_Origin(Pro):寒假都结束了,这个图还是不会画?【数据绘图】...

寒假前给大家分享了一个图&#xff0c;大家要的教程来了。【数据绘图】好图分享&#xff1a;寒假&#xff1f;不存在的&#xff01;​mp.weixin.qq.com绘图思路&#xff1a;左侧起止时间&#xff1a;散点图&#xff0c;交换XY坐标轴&#xff1b;中间的连线为Drop Lines&#xf…

可以激发设计灵感的音乐_建立灵感库以激发您的创造力

可以激发设计灵感的音乐I often find a lot of inspiration from work I see while scrolling social media. Saving art or images that inspire you allows you to build a library of resources to draw from whenever you’re working on a project.在滚动社交媒体时&#…

若川知乎问答:做前端感觉很吃力怎么办?

前些日&#xff0c;我发了一篇推文《做前端感到越来越吃力了&#xff01;怎么办&#xff1f;》&#xff0c;虽然是推广&#xff0c;但阅读量却很高&#xff0c;推广标题我们大概率不能改&#xff0c;感觉骗了大家&#xff0c;掉粉挺多人。写稿的人可能就是看到了知乎这个问答。…