Skip to content

Latest commit

 

History

History
193 lines (147 loc) · 6.66 KB

代理和开发调试.md

File metadata and controls

193 lines (147 loc) · 6.66 KB

前端代理和开发调试方案

前言

页面代理和调试是每个前端都要面对且容易忽视的问题

一、综述

1.1 开发方式 vs 开发场景

开发方式 \ 开发场景 PC Web MT Web 混合App 小程序
旧式前后端分离(Jquery,文件未经过打包编译) 请求代理 页面请求代理 页面请求代理 -
新式前后端分离(Vue、React,文件经过打包编译) 请求代理 页面请求代理 页面请求代理 -
未分离后端渲染(Java web、PHP,文件未经过打包编译) 文件请求代理 文件请求代理 文件请求代理 文件请求代理
分离式后端渲染(Nuxt、Next) - - - -

1.2 代理和调试工具

  • 浏览器开发者工具、设备连接工具:Chrome、Firefox
  • 请求代理工具:Fiddler、Charles
  • Host切换工具:SwitchHost
  • 注入型调试工具:vconsole、eruda、m-console,针对移动端开发
  • 综合性工具:Whistle

二、混合APP页面调试

1.1 真机连接本地开发环境(开发时调试)

  1. devServer 不需要设置 host 等(在 whistle rules 里面设置即可),但是需要设置 disableHostCheck:
devServer: {
	disableHostCheck: true
}
  1. 在 whistle 中设置 rules:
www.test.com/hello/basepage localhost:8080/basepage

注意:localhost不生效时,可用本机IP代替。

注意:上面的例子,www.test.com/hello/basepage被代理后,本地 vue router 解析到的 path 仍然是 hello/basepage 而不是 basepage

  1. 给移动端 wifi 设置代理,代理地址为 {本机IP}:8899

  2. 如果移动端是请求https,参照这里进行设置。

1.2 真机连接本机(bug调试)

  1. 设置production环境的publicPath,然后 build。
  2. 在 whistle 中代理 html 和各类静态资源:
www.test.com/hello/basepage file://D:/projects/project-name/dist/index.html
www.test.com/your-public-path file://D:/projects/project-name/dist
  1. 配置whistle rules whistle自带的weinre和log
  • weinre,可远程调试设备里的页面
  • log,捕获页面中的日志
www.test.com weinre://test
www.test.com log://test

如果你嫌弃weinre用的不如devtools顺手,可以看看m-console

1.3 模拟器调试

真机调试是首要bug调试方式,但有时遇到由手机系统版本引起的bug,而没有对应真机,可尝试使用模拟器调试

1.3.1 Andorid

Android 模拟器有专门的Webview Tester可以方便测试webview问题

  1. 下载Android Studio,创建 AVD。
  2. 启动模拟器,浏览器打开http://{your-ip}:8899/cgi-bin/rootca下载 whistle 证书。这里最好给两个凭据用途都安装一次。
  3. 设置代理:进入设置=>wifi=>长按连接的wifi,选择“修改网络”,proxy:{your-ip},port:8899。
  4. 打开浏览器请求即可看到whistle的抓包记录。

1.3.2 IOS

IOS模拟器必须依赖MAC,PC用户最多可以远程连接MAC上的模拟器

  • PC安装Visual Studio
  • 连接MAC
  • 启动IOS模拟器即可调用远程的ios模拟器

三 PC、移动端开发调试

前后端分离项目,可以直接通过代理转发请求即可,若需cookie的在F12开发者工具配置即可 下面说下非前后端分离项目的调试

2.1 Docker

2.2 文件请求代理

将静态资源的请求如js、css代理到本地文件,修改本地文件就能看到效果 下面是示例 whistle rules:

www.ekwing.com/resource/exam file://D:/svn-projects/exam/resource

2.3 移动真机调试

Andorid

利用Chrome Inspect连接Android,可以直接使用devTools

IOS

Safari可直接连接Iphone进行调试

五、附录

5.1 whistle

5.2 weinre

weinre(Web Inspector Remote),是一个网页远程调试工具,可以在PC上调试移动端web页面。

5.2.1 前言

weinre是基于Webkit Web Inspector的用户接口代码开发的,提供了类似Chrome开发者工具的功能:

  • Element:查看、修改dom、css
  • Resources:查看、修改localStorage/sessionStorage
  • Network:查看网络请求信息
  • Timeline:时间线
  • Console:查看控制台输出

weinre和Webkit Web Inspector的区别:

  • 没有使用浏览器的原生代码,只是纯JavaScript,导致:
    • 功能上有限制,在源码级别调试JavaScript较困难
    • 被调试目标的代码在浏览器运行时,没有作任何处理去支持调试。例如手机上的浏览器
  • weinre支持远程交互,可以在一个机器运行用户接口的调试器,调试另一个机器上的web页面
    • 多个调试客户端可以同时调试一个目标

weinre和Web Inspector相同的是:Debug用户界面只能运行在基于Webkit的浏览器

5.2.2 工作原理

weinre由三部分组成:

  • Debug Server:是weinre-node分配的HTTP服务器,运行在PC中,Debug Client和Debug Target通过XHR HTTP请求与其交互
  • Debug Client:Web Inspector用户界面,运行在PC中,展示如Elements、Console界面的网页
  • Debug Target:被调试网页。同时它指代被调试的设备,基于weinre被设计用于调试移动端设备上的应用这个原因,这个设备即是你手机设备

由Debug Server提供的JavaScript代码会被注入到被调试网页中,使其具备被调试的能力。

5.2.3 使用

安装

npm i weinre -g

运行

weinre [options]
# 显示帮助
--help(-h)

# 运行HTTP服务器的端口
--httpPort [portNumber]

# HTTP服务器绑定的IP地址
--boundHost [hostname | ip address | -all-]

# 是否输出详细信息
--verbose [true | false]

# 是否输出更多信息
--debug [true | false]

# 服务器发送信息给被调试目标或用户界面前能等待的最长时间
--readTimeout [seconds]

# 服务器证明被调试目标或用户界面已经结束前等待的最长时间
--deathTimeout [seconds]

注入脚本

# 获取本机IP,添加如下JS链接到需要调试的目标网页头部
<script src="http://a.b.c:8081/target/target-script-min.js"></script>

5.2.4 其他

平台支持:

  • Debug Server:所有支持node.js的平台
  • Debug Client:调试终端运行的浏览器
    • Google Chrome
    • Apple Safari
    • 其他基于Webkit的浏览器
  • Debug Target:被调试网页的浏览器
    • Andorid浏览器应用
    • IOS手机Safari应用
    • PhoneGap/Cordova
    • 其他

不支持平台:

  • Debug Target
    • IOS <= 3.1.3
    • webOS <= 1.45

5.3 Fiddler

5.4 Charles