redwood项目在vscode中启动dev server失败,主因是端口冲突(如8910被占)或redwood.toml端口配置硬编码,应优先用--forward-api-port换端口并重启终端;graphql断点需设在graphql.ts handler处且launch.json配置outfiles指向.redwood/functions/。

Redwood项目在VSCode里启动不了dev server?先检查redwood.toml和端口冲突
Redwood默认用yarn redwood dev同时拉起Web和API服务,但VSCode终端常因环境变量缺失或端口被占而静默失败。常见现象是终端卡在“Starting API and Web servers…”不动,或者报Port 8910 is already in use。
实操建议:
- 先手动运行
yarn redwood dev --forward-api-port=8911,把API服务换到未占用端口,避免和本地其他Node服务(比如Next.js)撞车 - 确认
redwood.toml里api.port和web.port没被硬编码成已占端口;改完记得重启VSCode终端,因为Redwood CLI会缓存配置 - 如果用WSL2,需在
redwood.toml加host = "0.0.0.0",否则VSCode的Remote-WSL插件连不上localhost
怎么在VSCode里给Redwood的GraphQL服务打断点?别直接在services目录下设断点
Redwood的GraphQL resolver实际运行在.redwood/functions/graphql打包后的文件里,源码里的api/src/services/**/*.ts只是开发时的入口,VSCode默认无法映射调试。
实操建议:
- 在VSCode的
.vscode/launch.json中添加Node.js调试配置,关键字段必须设为:"outFiles": ["./.redwood/functions/**/*"],否则断点不命中 - 启动调试前,先执行
yarn redwood build api生成sourcemap(开发时yarn redwood dev也会做,但有时缓存失效) - 断点优先打在
api/src/functions/graphql.ts的handler函数开头,这里能捕获所有请求;再往下进resolver,要确保api/src/services下的文件有debugger语句且sourcemap可用
单元测试跑不起来,报Cannot find module '@redwoodjs/testing'?检查jest.config.js路径解析
Redwood的测试依赖通过Babel或TS预处理器注入全局工具函数(如mockCurrentUser),但VSCode的Jest Test Explorer插件常因工作区根路径不对而找不到这些模块。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
实操建议:
- 在VSCode设置里搜
jest.pathToJest,设为"yarn jest"(不是yarn run jest),避免Shell解析差异 - 确认
jest.config.js导出的对象里有roots: ['<rootdir>/web', '<rootdir>/api']</rootdir></rootdir>,否则api/src/services/__tests__里的测试文件会被忽略 - 如果用TypeScript,确保
ts-jest版本与Redwood锁定的typescript版本兼容(v5.x Redwood对应TS 4.9,装ts-jest@29.1会报错)
修改cells组件后UI不更新?不是热更新失效,是Cell缓存策略在作怪
Redwood Cell默认启用useStrictDataAccess和自动refetch,但VSCode保存文件后,浏览器可能仍显示旧数据——这不是HMR问题,而是Cell内部的QUERY结果被React Query缓存了。
实操建议:
- 在Cell组件顶部加
export const QUERY = gql`...` // eslint-disable-line no-unused-vars,防止ESLint删掉未显式使用的QUERY,否则Cell会跳过数据获取 - 调试时临时在Cell的
Success组件里加console.log(props),确认props是否真的没变;如果变了但UI没刷新,大概率是useQuery的staleTime设得过大(默认1000ms) - 想强制重载,可在浏览器控制台执行
window.__REDWOOD__APOLLO_CLIENT__.resetStore(),这比关掉再开dev server快得多
Redwood的调试链路比普通React项目多一层构建抽象,最易被忽略的是.redwood/functions/这个中间产物目录——它既是调试断点的实际落点,也是错误堆栈里路径混乱的源头。










