Codex CLI实战:5个真实开发场景下的高效用法与避坑指南
2026/7/17 11:42:09 网站建设 项目流程

Codex CLI实战:5个真实开发场景下的高效用法与避坑指南

写这篇文章的起因很简单——网上关于Codex的文章,十篇有九篇在讲怎么安装、怎么付费。真正讲"装上之后怎么用"的内容几乎空白。用了三个月Codex CLI之后,我把日常开发中最常用的五个场景和踩过的坑整理出来,给已经装好但不知道怎么用的朋友一个参考。

一、环境准备(只说重点)

如果你还没装,Windows用户最简单的方式:

# 方式一:Scoop安装(推荐)scoopinstallcodex# 方式二:直接下载预配置包# 从 codex.ijinshan.com 下载,省去配环境变量

装完之后第一步,设置模型。默认模型表现一般,手动指定GPT-5系列:

codex--modelgpt-5.3

第二步,创建.codexignore文件,否则Codex会扫描node_modules里所有文件——你会等到怀疑人生:

# .codexignore(语法和.gitignore一样) node_modules/ dist/ build/ .vscode/ *.log

第三步,建议在codex工作目录下建一个CODEX.md文件,用来描述项目规范。Codex每次启动会读取这个文件作为系统提示:

# CODEX.md - 项目使用TypeScript + Express - 数据库是PostgreSQL,ORM用Prisma - 测试框架Jest - 代码风格:函数式优先,避免class - 所有API接口必须有输入验证

二、场景1:生成完整的REST API接口

需求:为User模块新增一个"根据ID查询用户订单"的接口,包含分页。

直接对Codex说:

codex"add a GET /users/:id/orders endpoint with pagination (page & limit query params). Include Prisma query in the service layer, input validation, and Jest tests. Return 404 if user not found."

Codex的具体执行过程:

  1. 创建orders.controller.ts——路由处理
  2. 更新orders.service.ts——添加getOrdersByUserId方法
  3. 添加zod输入验证——pagelimit的合法性检查
  4. 生成orders.test.ts——包括正常用例、边界值、用户不存在的404
  5. 自动执行npm test——六个测试用例一次通过

生成的核心代码示例:

// orders.service.ts(Codex自动生成)exportasyncfunctiongetOrdersByUserId(userId:number,page:number=1,limit:number=20){constskip=(page-1)*limit;const[orders,total]=awaitPromise.all([prisma.order.findMany({where:{userId},skip,take:limit,orderBy:{createdAt:'desc'},include:{items:true}}),prisma.order.count({where:{userId}})]);return{data:orders,pagination:{page,limit,total,totalPages:Math.ceil(total/limit)}};}

整个过程五分钟,手动写至少要半小时。

三、场景2:重构臃肿的Service文件

项目中有一个2100行的user.service.ts,包含了用户相关的所有逻辑——注册、登录、资料修改、权限管理、密码重置全塞在一个文件里。

一句命令:

codex"refactor src/services/user.service.ts. Split it into smaller modules: auth.service.ts, profile.service.ts, password.service.ts, permissions.service.ts. Extract shared utilities. Keep all existing tests passing. Update all imports across the codebase."

Codex的做法值得一说——它不是粗暴地切成几块就完事,而是:

  1. 先分析当前文件的所有导出函数和它们的依赖关系
  2. 按职责分组后逐一创建新文件
  3. 提取公共工具函数到user.utils.ts
  4. 更新整个项目中所有import路径
  5. 每切完一个模块就跑一次测试,保证不挂

重构过程中有两个测试挂了(循环依赖问题),Codex自动识别并修复。最终2100行的文件拆成了5个文件,平均每个200-400行。

四、场景3:自动修复Lint错误

CI/CD里挂了237个ESLint错误,手动修得一个个点。Codex一句话:

codex"fix all ESLint errors in the project. Run npx eslint --fix first, then manually fix remaining issues. Don't disable rules."

执行过程:

  • 先跑npx eslint --fix(自动修复了约180个)
  • 剩下的逐个分析:主要是no-unused-vars@typescript-eslint/no-explicit-anyimport/order
  • 自动补充缺失的类型定义
  • 调整import顺序

修完后自动跑一遍测试确认没有引入新问题。

五、场景4:生成数据库迁移

需求:为三个表添加软删除支持(deleted_at字段)。

codex"add soft delete support to users, orders, and products tables. Generate migration files, update Prisma schema, add middleware to filter out soft-deleted records by default, and add tests."

Codex完成后你得到的是:

  • 一个migration SQL文件
  • 更新后的schema.prisma
  • 一个Prisma middleware自动过滤deleted_at IS NOT NULL的记录
  • 测试覆盖软删除后的增删改查

核心的middleware代码:

// Codex自动添加的软删除中间件prisma.$use(async(params,next)=>{if(params.action==='findUnique'||params.action==='findFirst'){params.action='findFirst';params.args.where={...params.args.where,deletedAt:null};}if(params.action==='findMany'){params.args.where={...params.args.where,deletedAt:null};}returnnext(params);});

六、场景5:排查线上Bug

凌晨三点收到告警:/api/checkout接口500错误。从床上爬起来,把报错栈甩给Codex:

codex"there's a 500 error on the /api/checkout endpoint. Here's the error: TypeError: Cannot read properties of undefined (reading 'price') at OrderService.calculateTotal (/app/src/services/order.service.ts:142) at CheckoutController.processCheckout (/app/src/controllers/checkout.controller.ts:56)"

36秒后,Codex给出诊断:

根因:order.service.ts第142行,products数组中某个元素没有price字段。 数据库中存在关联的product_id但该商品已被删除(products表中有该id的记录但status='deleted'), 导致Prisma include返回null而非跳过。 修复方案:在Prisma查询的include条件中添加status: 'active'过滤。

然后自动应用修复、跑测试、生成commit message。整个过程不到两分钟。

七、四个必须注意的坑

坑1:.codexignore别忘了配

前面提过了,再强调一次。不配的话Codex会把node_modules全部读进去,第一次执行能卡五分钟。

坑2:第一次用别直接上核心模块

先让Codex写测试、加注释、修lint。观察几次它的代码风格和你的项目是否契合,再让它碰核心业务逻辑。

坑3:–approve模式适合个人项目,团队慎用

--approve模式下Codex会自动git commit。如果你在团队中工作,建议关掉,逐条确认改动:

codex --no-approve"your task here"

坑4:大型重构分步来

不要一条指令让它重构整个项目。拆成小步骤,每一步验证后再继续。Codex虽然强,但不是银弹。

八、总结

Codex CLI和Copilot/Cursor的本质区别:前者是"描述需求→AI执行",后者是"写代码→AI补全"。交互范式完全不同。

对于后端开发者,尤其是日常大量CRUD、数据库迁移、测试编写这类重复性工作,Codex CLI的效率提升是数量级的。

工具在这里:codex.ijinshan.com,装好就能用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询