# 云函数本地调试功能

云开发提供了云函数本地调试功能，在本地提供了一套与线上一致的 Node.js 云函数运行环境，让开发者可以在本地对云函数调试，使用本地调试可以提高开发、调试效率：

* 单步调试/断点调试：比起通过云开发控制台中查看线上打的日志的方法进行调试，使用本地调试后可以对云函数 Node.js 实例进行单步调试/断点调试
* 集成小程序测试：在模拟器中对小程序发起的交互点击等操作如果触发了开启了本地调试的云函数，会请求到本地实例而不是云端
* 优化开发流程、提高开发效率：调试阶段不需上传部署云函数，在调试云函数时，相对于不使用本地调试时的调试流程（「本地修改代码 -> 上传部署云函数 -> 调用」）的调试流程，省去了上传等待的步骤，改成只需「本地修改 -> 调用」的流程，大大提高开发调试效率

同时，本地调试还定制化提供了特殊的调试能力，包括 Network 面板支持展示 HTTP 请求和云开发请求、调用关系图展示、本地代码修改时热重载等等能力，帮助开发者更好的开发调试云函数。功能具体介绍见下方。

建议开发者在开发阶段和上传代码前先使用本地调试测试通过后再上线部署。

注意：本地调试不支持共享环境的云函数调试，请在宿主小程序进行调试，或者将云函数部署后进行调试。

### 使用流程

#### 1. 打开本地调试界面

开发者可通过右键点击云函数名唤起本地调试界面。

![描述](https://res8.wxqcloud.qq.com.cn/wxdoc/daaf1354-670b-4932-add4-4dd72a19a43e.gif)

在本地调试界面中点击相应云函数并勾选「开启本地调试」方可进行该云函数的本地调试。取消勾选「开启本地调试」后可关闭对该云函数的本地调试。

若云函数中有使用使用到 npm 模块，需在云函数本地目录安装相应依赖才可正常使用云函数本地调试功能。在开启本地调试的过程中，系统会检测该云函数本地是否已安装了 `package.json` 中所指定的依赖，如无会给出警告。

对于已开启本地调试的云函数，微信开发者工具模拟器中的对该云函数的请求、以及其他开启了本地调试的云函数的对该云函数的请求，都会自动请求到该本地云函数实例。

为方便调试，本地调试下，一个云函数在本地仅会有一个实例，实例会串行处理请求，本地云函数递归调用自身将被拒绝。

#### 2. 调试方式

开启了本地调试后，IDE 小程序中所有对开启了本地调试的云函数的请求都会请求到本地云函数，可进行断点调试等操作。除了在 IDE 小程序中触发本地云函数外，还可以在本地调试界面输入请求参数并发起调用。在手动触发的模式下，系统支持两种模拟方式：

- 从小程序端调用：在云函数内可通过 [`cloud.getWXContext()`](/minigame/dev/wxcloud/reference-sdk-api/utils/Cloud.getWXContext) 获取调用的微信上下文，包括 `OPENID` 等字段。
- 从其他云函数调用：调用时云函数内不带有微信上下文。

### 本地调试特殊 Feature

#### 1. 调用关系图展示

本地调试提供了丰富的执行过程信息。在小程序端调用本地云函数时，会在小程序调试器端展示调用关系图，即小程序调用了哪个本地云函数，随后又该本地云函数调用了哪些本地或云端的云函数。同时，在本地调试面板中各个云函数实例的调试器也会展示该实例发起的对外云函数调用的调用关系图。

![](https://res8.wxqcloud.qq.com.cn/wxdoc/cbfbe258-254f-4c79-8b0c-b9bf1b346d5b.png)

#### 2. Network 面板

即使是在 Node.js 的运行环境，我们也为本地调试环境提供了 Network 面板支持，可以展示在云函数实例中发起的对外 HTTP 请求和云开发请求。

![](https://res8.wxqcloud.qq.com.cn/wxdoc/95f04add-0649-4092-9850-f50d2b2355c9.png)
![](https://res8.wxqcloud.qq.com.cn/wxdoc/9d163081-4bb6-4028-86c8-afc8ae86a72c.png)

#### 3. 热重载

本地调试云函数实例右侧的面板中可以开启「文件变更时自动重新加载」，开启后，每当函数代码发生修改，会自动重新加载云函数实例，这就省去了关闭本地调试再重新打开本地调试开关的麻烦。

#### 4. 模板管理

在通过面板手动触发云函数时，开发者需手动输入请求参数。为方便开发者进行模板管理，系统提供了模板的保存、另存为及删除功能。

同时在云函数本地调试界面保存模板时，系统会在小程序本地代码目录下创建`cloudfunctionTemplate `目录，并新建该云函数的模板文件。开发者也可通过直接修改该模板文件进行模板的管理。

![描述](https://res8.wxqcloud.qq.com.cn/wxdoc/f4fda0f5-bdbd-49e5-bdf8-a00e76d5403e.png)

### 使用须知

* npm 依赖：若云函数中有使用到 npm 模块，需在云函数本地目录安装相应依赖才可正常使用云函数本地调试功能。
* npm native 依赖：如果云函数中使用了 native 依赖，注意 native 依赖是需要各个平台分别编译的，比如在 Windows 上本地调试时安装的 native 依赖是 Windows 上编译的结果，而线上云函数环境是 Linux 环境，因此调试完毕上传云函数注意选择云端安装依赖的上传方式，该方式会自动在云端环境下编译 native 依赖，如果由于云端编译环境不足而需要选择全量上传则需要在 Linux CentOS 7 下编译后结果上传。
* Node.js 版本：系统默认使用开发者工具自带的 Node.js，用户可通过点击本地调试面板左上方的设置进行修改。
* 云函数实例个数：本地调试下一个云函数最多只会有一个实例，对本地云函数实例的并发请求会被实例串行处理

### 运行环境差异

本地调试中的云函数运行环境与线上环境有如下区别：

* 如果未设置「环境变量」，本地调试中通过 [`getWXContext`](/minigame/dev/wxcloud/reference-sdk-api/utils/Cloud.getWXContext) 获取的 `env` 值为 `local`，也就是不管小程序端指定访问哪个环境的云函数，如果该云函数开启了本地调试，都会被触发，且其中的 `getWXContext().env` 始终为 `local`。如果需要指定调用的宿主环境，可以设置右侧的「环境变量」为所需环境
* 本地调试不支持 `getWXContext().UNIONID`
* 本地调试中不提供[临时存储空间](notice)

### 运行环境要求

- 1.02.1903211 或以上版本的开发者工具，[下载地址](/miniprogram/dev/devtools/download.md)。
