# 实时开发
通过微信云托管 VSCode 插件,可以实现实时开发,即代码变动时,不需要重新构建和启动容器,即可查看变动后的效果。
# 使用教程
Step 1:安装插件
点击 安装链接 或者通过 VSCode 搜索 “Weixin Cloudbase”,安装微信云托管 VSCode 插件。
Step 2:检查容器
打开项目,检查微信云托管容器是否存在。
Step 3:选择 Live Coding
右键点击需要调试的容器,选择 Live Coding,将自动生成 Dockerfile.development 和 docker-compose.yml 2 个文件并启动容器。
Step 4:访问服务
启动容器后,将提示访问地址,点击即可访问服务。
Step 5:停止服务
开发任务结束后,可右键点击运行中的容器,选择 Stop,即可停止服务。
通过实时开发能力,代码改动不再需要重新构建镜像和启动容器,一键保存即可查看改动后的效果,高效又便捷。
# 开发模式的 Dockerfile
实时开发使用项目目录下的 Dockerfile.development
作为开发期间的容器的 Dockerfile
。
大多数情况下,插件将根据项目的 Dockerfile
自动生成本文件,不需要手动编写。
开发模式的 Dockerfile 与正式模式的 Dockerfile 的区别在于:
- 单阶段构建
- 将编译命令转换为启动命令,如 Spring Boot 模板的
mvn package
会转换为spring-boot:run
- 拉取实时开发的工具套件,安装到
/usr/bin
下 - 通过实时开发工具套件启动用户程序,在代码发生更改时,自动重启进程。
参考示例如下:
FROM ccr.ccs.tencentyun.com/weixincloud/wxcloud-livecoding-toolkit:latest AS toolkit # 拉取实时开发套件(nodemon)
FROM node:12-slim # 运行时容器
COPY nodemon /usr/bin/nodemon # 复制套件到容器
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . ./
CMD [ "nodemon", "-x", "node index.js", "-w", "/usr/src/app", "-e", "java, js, mjs, json, ts, cs, py, go" ] # 使用 nodemon 启动应用
# 开发模式的 docker-compose.yml
实时开发将使用项目目录下的 docker-compose.yml
将当前目录映射到容器中。
大多数情况下,插件将根据项目的 Dockerfile
自动生成本文件,不需要手动编写。
可以参考如下的 docker-compose.yml
结构,按需修改:
version: '3'
services:
app:
build:
context: . # 构建上下文
dockerfile: Dockerfile.development
volumes:
- .:/app # 需要映射的目录(即代码目录)
- /app/node_modules # 映射 node_modules 目录,如果有构建产物与代码目录同级,需要单独映射避免无法运行
ports:
- 27081:80 # 监听端口,主机端口:容器端口
container_name: wxcloud_wxcloudrun-express # 容器名称
labels: # 容器标签,一般不需改动
- wxPort=27082
- hostPort=27081
- wxcloud=wxcloudrun-express
- role=container
environment:
# 使用本地调试 MySQL 时,需要填入如下环境变量,并启动 MySQL 代理服务
- MYSQL_USERNAME=
- MYSQL_PASSWORD=
- MYSQL_ADDRESS=
networks:
default:
external:
name: wxcb0 # 容器网络打通,一般不需改动
# 注意事项与 FAQ
# 兼容性
实时开发目前兼容如下的模板:
- NodeJS 官方模板(Express,Koa)
- Java 官方模板(Spring Boot)
- PHP 官方模板(ThinkPHP,Laravel)
- Python 官方模板(Django,Flask)
- .NET 官方模板(ASP.NET Core)
部分语言框架的依赖不支持动态加载形式,会报如下类似的错误,遇到这种情况属于依赖自身问题,请先用其他的开发模式。
Dynamic loading not supported
# 容器配置文件
首次使用实时开发时,会自动识别项目内是否已存在 Dockerfile.development
和 docker-compose.yml
文件,如果存在,则不会生成新的文件。如需重新生成,可以删除这两个配置文件后重新启动实时开发。
实时开发也支持 VPC 网络打通和微信开发者工具本地调试,使用方式与普通启动一致。
# Windows 下实时开发不生效的问题
受限于 Docker 在 Windows 下的文件系统实现,非 Edge 版本的 Docker Desktop 无法接收文件修改事件。可以启用 --legacy-watch
参数让实时开发套件使用传统的文件监控机制,但会占用更多的 CPU 资源。
# Dockerfile.development
CMD [ "nodemon", "--legacy-watch", ...] # 增加 --legacy-watch 参数