
1. 为什么 uni-wx 项目直接丢给 Codex 会翻车uni-wx 是一套跑在 UniApp 上的移动端项目模板用 Vue 写页面、SCSS 管样式、rpx 做单位内置了一批以xt-打头的公共组件和useTableMixin、useFormMixin这类组合式逻辑。它适合谁适合已经在用 UniApp 做小程序或 H5、又想让 Codex 帮忙写页面的团队。它能做什么能让你少写重复的列表、表单、弹窗代码。但前提是——你得先把项目上下文喂给 Codex。我试过直接把一个空页面需求丢给 Codex让它写个带分页的订单列表。结果它给我生成了一个用axios请求、用px写样式、自己new了一个空状态 div 的页面。代码本身没错但放进 uni-wx 里就是异物请求没走项目封装的request样式和视觉规范对不上空状态也没复用xt-noData。这就是典型的AI 生成代码与运行时脱节。问题不在 Codex 会不会写 Vue而在于它不知道你这个项目把哪些能力封装好了、哪些行为必须留在页面文件里、哪些地方不能自己临时造。移动端页面真正麻烦的地方从来不是语法而是生命周期、参数接收、返回刷新、触底加载这些散落在页面里的行为。Codex 默认会把这些塞进组件组件越能干页面越难控。所以这篇要交付的是一份可复制的移动端上下文清单模板加上给 Codex 的提示词配置最后给出在本地跑通 uni-wx 编译验证的具体动作。清单不长但能挡住很多低级返工。下面按先确认组件、再确认行为、最后确认样式和文件拆分的顺序展开每一步都给可直接粘贴的片段。2. 接入前的 TaoToken 前置准备与 Codex 配置Codex 要能读到你的项目上下文得先有一个稳定的模型调用入口。我用的是 TaoToken 做统一接入官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。它的作用是把你对模型的请求收敛到一个 Base URL 上Codex、Cline、Claude Code 这些工具都能指向同一个入口省得每个工具配一套。先说清楚TaoToken 不是编辑器它不替代你的 IDE也不碰你的代码仓库。它只负责模型调用这一层。你的 uni-wx 项目还是老老实实放在本地Codex 通过配置读文件、写文件。第一步去控制台拿 Key。打开 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在 API Keys 页面创建一个新 Key复制出来。这个 Key 只显示一次丢了就重建。拿 Key 的入口在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。第二步确认你要用的模型 ID。不同工具对模型名的写法不一样Codex 走的是 OpenAI 兼容格式Claude Code 走的是 Anthropic 格式。你可以在模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 先试一下模型能不能正常回话确认 ID 拼写没错再往配置里填。第三步如果你打算长期用 Codex 做编码和 Agent 任务建议直接上 Coding Plan入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它比按次调用更适合反复读项目、反复改文件这种高频场景。这里有个关键点Codex 读项目上下文靠的是它自己的文件访问能力不是靠你把代码贴进对话。所以配置里 Base URL、Key、Model ID 三件套必须齐全缺一个都会在请求阶段报错。下面第三节给可直接复制的配置片段。3. 可复制的 Codex 配置与上下文清单模板这一节是全文最该抄走的部分。先给 Codex 的配置文件再给上下文清单模板。Codex 的配置一般放在用户目录下的~/.codex/config.tomlWindows 是%USERPROFILE%\.codex\config.toml。如果你用的是支持auth.json的版本认证信息会单独放在~/.codex/auth.json。三件套要写全# ~/.codex/config.toml model 你的模型ID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat对应的auth.json{ TAOTOKEN_API_KEY: sk-你从控制台复制的Key }注意base_url结尾不要多加/v1TaoToken 的 API 根路径就是https://taotoken.net/api多写一层会 404。wire_api用chat走 OpenAI 兼容格式Codex 默认就认这个。配好之后把下面这份上下文清单模板存成项目根目录的CODEX_CONTEXT.md每次让 Codex 干活前先让它读这个文件# uni-wx 移动端上下文清单 ## 公共组件先确认是否存在缺失要记录不要自造 - 页面外壳xt-page、xt-nav - 空状态xt-noData - 弹窗xt-dialog、xt-botDialog - 表单xt-ipt、xt-iptSel、xt-selTime - 图片与行展示xt-img、xt-rowItem、xt-rowLabel ## 公共方法 - 提示mess - 加载loading - 确认弹窗showModalFn - 跳转navigateFn ## 生命周期归属 | 行为 | 推荐位置 | 说明 | | --- | --- | --- | | 接收页面参数 | 页面 onLoad | 详情页、编辑页优先在这里拿参数 | | 首次请求 | 页面 onLoad | 不在普通组件里拉整页数据 | | 再次显示刷新 | 页面 onShow | 返回列表后是否刷新要提前定 | | 触底加载 | 页面触底入口或 xt-page 回调 | 和分页状态一起处理 | | 组件内部初始化 | Vue 组件生命周期 | 只处理局部展示和内部状态 | ## 列表状态 - current、size、total、hasNext、requestState 的来源和更新时机 - 刷新、触底、失败、无更多数据分别写清楚处理方式 - 无法确认字段时先查 useTableMixin 或已有列表页 ## 表单状态 - 校验失败、提交中、提交成功、提交失败四种状态都要说明 - 提示和加载统一走公共封装 ## 样式与文件组织 - 样式用 SCSS单位用 rpx颜色字号优先走变量或原子类 - API 方法后缀用 Api业务逻辑下沉到 service - 页面只保留编排和生命周期入口这份清单不替 Codex 写代码它只负责让 Codex 在动手前知道自己不能随便发挥。把它和配置一起用Codex 生成的页面才会留在项目轨道上。4. 验证请求与本地跑通 uni-wx 编译配置写完不算完得验证两件事模型请求通不通项目编译过不过。先验证模型请求。在终端里直接 curl 一下确认 Key 和 Base URL 没问题curl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: 你的模型ID, messages: [{role: user, content: 回复 ok}] }返回里能看到choices数组和content字段就说明请求链路通了。如果返回 401是 Key 的问题如果返回local proxy failed多半是本地网络或代理配置干扰检查一下环境变量里有没有残留的HTTP_PROXY。请求通了之后让 Codex 按清单生成一个页面然后本地编译验证。uni-wx 基于 UniApp编译命令通常是# 安装依赖 npm install # 编译到微信小程序 npm run dev:mp-weixin # 或编译到 H5 npm run dev:h5编译产物在dist/dev/mp-weixin或dist/dev/h5。打开微信开发者工具导入dist/dev/mp-weixin看页面能不能正常渲染。重点检查三处空状态是不是xt-noData、列表请求是不是走了项目封装的request、样式单位是不是rpx。如果编译报reading choices这类错误说明模型返回结构和你代码里解析的字段对不上回去检查wire_api和模型 ID。如果编译报 SCSS 变量未定义说明 Codex 用了项目里不存在的变量把变量名补进清单模板。实测下来把清单模板放进项目、让 Codex 先读再写返工率能降一大截。关键动作就三个配置三件套写全、清单模板存进项目、编译后逐项对照检查。5. 本篇常见报错排查这一节按真实报错来对。你大概率会碰到下面几种。401 Unauthorized。Key 没填对或者auth.json里的字段名和config.toml里的env_key对不上。检查env_key TAOTOKEN_API_KEY和auth.json里的键名是否完全一致大小写敏感。local proxy failed。本地有代理环境变量在干扰请求。执行env | grep -i proxy看看有没有HTTP_PROXY、HTTPS_PROXY有的话临时 unset 掉再试。注意这不是让你去配代理而是排查残留配置。reading choices of undefined。模型返回体里没有choices通常是base_url写错或模型 ID 不存在。确认base_url https://taotoken.net/api没有多余路径模型 ID 在模型对话页能正常回话。OAuth 相关报错。如果你用的是 Claude Code 那套 Anthropic 格式认证方式不一样别把 OpenAI 的 Key 直接塞进 Anthropic 配置。Claude Code 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 按里面的字段填。编译报组件未注册。Codex 用了xt-noData但你没在页面里 import或者项目里根本没这个组件。回清单模板确认组件是否存在缺失项要记录不要让它自造一个。样式单位混乱。Codex 写了px编译不报错但视觉不对。在清单里明确单位用 rpx生成后全局搜一下px排查。API 方法没走封装。Codex 直接写了uni.request没走项目的request。检查生成的api文件后缀是不是Api业务逻辑有没有下沉到service。排查顺序建议先看请求层401、proxy、choices再看编译层组件、SCSS最后看规范层单位、文件组织。请求层不通后面都白搭。6. 把 Codex 收进项目规则里清单模板和配置都给了剩下的是习惯问题。每次让 Codex 动手前先让它读CODEX_CONTEXT.md再给具体任务。任务描述里带上先确认组件是否存在生命周期按清单归属样式用 rpx这几句比事后返工省事得多。如果你还在按次调用模型建议切到 Coding Plan入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 长期编码和 Agent 任务用这个更顺。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 配置字段有疑问直接查。模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 用来验证模型 ID 和返回格式配之前先在那儿试一句。下一篇我会进入移动端列表分页专门拆刷新、触底、加载状态和空状态这几件事。后台列表讲过分页链路移动端要换一套验收方式。工具本身放在后面更重要的是把 Codex 的动作收进项目已有规则里。