Skip to content

Commit af571b2

Browse files
committed
add debug.md
1 parent 36ff95a commit af571b2

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

project/debug.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
2+
# 项目调试
3+
4+
spm3 一个较大的改变是源码书写规范从 CMD 变为 CommonJS ,带来的好处是和社区打通,更接近 nodejs 的开发体验。坏处是 CommonJS 的源码不能像 CMD 一样在浏览器里直接加载,从而影响线下的调试体验。
5+
6+
CommonJS 和 CMD 写法上最大的区别就是 `define(function(require, exports, module) {})` 的包裹,只要在调试阶段无缝的加入这个包裹,就可以比较方便的加载调试了。在 spm 3.6 之前的都是通过这个思路去解决的。
7+
8+
不过,这种方案有个比较大的问题,调试和构建方案不一致。所以潜在的会有调试通过但构建不通过的问题,并且维护上成本也比较高。所以在 spm 3.6 里,我们把调试方案基于构建来实现了。
9+
10+
有两个方案可供选择:
11+
12+
1. `spm build --watch`
13+
2. `spm server`
14+
15+
第一种方案不需要开 server,适用于不方便开 server 的场景;第二种方案需要开 server ,功能更强大。
16+
17+
> @spm-server 老用户:spm server 和 spm-server 不是同一个东西。spm server 是 spm-webpack-server 。
18+
19+
下面主要介绍第二种方案。
20+
21+
## 本地调试
22+
23+
本地调试没啥好说的,就是进入到一个 spm3 的项目目录中,执行 `spm server`
24+
25+
![](https://t.alipayobjects.com/images/T12PJfXktbXXXXXXXX.png)
26+
27+
然后可以通过参数开启各种附加功能。
28+
29+
![](https://t.alipayobjects.com/images/T15OBfXgNsXXXXXXXX.png)
30+
31+
### livereload
32+
33+
通过 `spm-server --livereload` 开启。
34+
35+
![](https://t.alipayobjects.com/images/T1rPReXjpvXXXXXXXX.png)
36+
37+
这时 spm-server 会做两件事:
38+
39+
1. 开启 livereload 服务器
40+
2. 访问 html 页面时会插入 livereload 脚本,用于和服务器通讯实时刷新页面
41+
42+
### weinre
43+
44+
通过 `spm-server --weinre` 开启。
45+
46+
![](https://t.alipayobjects.com/images/T1ij0eXcRmXXXXXXXX.png)
47+
48+
和 livereload 一样,spm-server 会做两件事:
49+
50+
1. 开启 weinre 服务器
51+
2. 访问 html 页面时会插入 weinre 脚本,用于和服务器通讯
52+
53+
然后就可以在 weinre 页面上看到当前绑定的设备了:(端口是 8989)
54+
55+
![](https://t.alipayobjects.com/images/T15j4eXoNcXXXXXXXX.png)
56+
57+
关于 weinre 的使用这里就不展开了,可以访问 [weinre 的官网文档](http://people.apache.org/~pmuellr/weinre/docs/latest/UserInterface.html) 来了解。
58+
59+
## 线上调试
60+
61+
线上调试主要是通过 anyproxy 实现。
62+
63+
```bash
64+
## spm-server 不直接依赖 anyproxy ,所以第一次使用前需要手动安装
65+
$ npm install anyproxy -g
66+
67+
## 启动 spm-server 和 (any)proxy
68+
$ spm-server --proxy
69+
```
70+
71+
然后应该能看到下图的提示:(包含 GUI 和 HTTP 代理的端口)
72+
73+
![](https://t.alipayobjects.com/images/T1Xj0eXc4nXXXXXXXX.png)
74+
75+
> 注意:第一次使用时应该会提示你安装根证书。
76+
77+
然后就是通过各种方式把请求配置到 HTTP 代理上去,比如 Chrome:
78+
79+
### Chrome
80+
81+
推荐使用扩展程序 [Proxy SwitchySharp](https://chrome.google.com/webstore/detail/proxy-switchysharp/dpplabbmogkhghncfbfdeeokoefdjegm?hl=zh-CN),可以很方便地定制大力规则和情景模式。安装完成后,添加一个情景模式比如 spm:
82+
83+
![](https://t.alipayobjects.com/images/T1jjVeXgpsXXXXXXXX.png)
84+
85+
然后到切换到“切换规则”面板,启用规则切换,加入一条对 alipayobjects.com 的代理规则的配置:
86+
87+
![](https://t.alipayobjects.com/images/T1h68eXd0cXXXXXXXX.png)
88+
89+
> 根据项目的不同,这里可能需要加上你对应的开发环境的代理规则
90+
91+
OK,接下来选择开启 SwitchSharp 的“自动切换模式”,代理的配置就完成了:
92+
93+
![](https://t.alipayobjects.com/images/T1i6VeXidsXXXXXXXX.png)
94+
95+
然后访问 https://a.alipayobjects.com/ ,如果在页面上看到项目目录下的文件列表了,就说明本地环境启动成功了:
96+
97+
![](https://t.alipayobjects.com/images/T1Hn4eXjJXXXXXXXXX.png)
98+
99+
同时在 anyproxy 的监控页面也会看到一条请求记录:
100+
101+
![](https://t.alipayobjects.com/images/T1.PVeXftnXXXXXXXX.png)
102+
103+
### 移动端
104+
105+
1. 常规方法
106+
107+
![](https://t.alipayobjects.com/images/T1eP0eXgdmXXXXXXXX.png)
108+
109+
1. 代理 app,比如 Andriod 的 [ProxyDroid](https://play.google.com/store/apps/details?id=org.proxydroid)
110+

0 commit comments

Comments
 (0)