sdnext
v0.0.25
Published
`sdnext` 是一个面向 `Next.js` 项目的轻量生成工具,用来基于 `shared/**` 自动生成 `actions/**`、`app/api/actions/**/route.ts`,以及基于 `actions/**` 生成 `hooks/**`。
Readme
sdnext
sdnext 是一个面向 Next.js 项目的轻量生成工具,用来基于 shared/** 自动生成 actions/**、app/api/actions/**/route.ts,以及基于 actions/** 生成 hooks/**。
约定
shared -> action
shared/addUser.ts
export async function addUser() {}会生成:
actions/addUser.ts
"use server"
import { createResponseFn } from "@/server/createResponseFn"
import { addUser } from "@/shared/addUser"
export const addUserAction = createResponseFn(addUser)shared -> route
如果源函数显式声明了 route 元数据:
export async function addUser() {}
addUser.route = true或:
export async function addUser() {}
addUser.route = {}会额外生成:
app/api/actions/add-user/route.ts
import { createRoute } from "@/server/createResponseFn"
import { addUser } from "@/shared/addUser"
export const { POST } = createRoute(addUser)默认情况下,fn.route 视为 false,不会生成 route。
actions -> hook
执行 sdnext hook 后,会根据 actions/** 生成 hooks/**。
命名规则:
getUser默认识别为getqueryUser默认识别为query- 其他函数默认识别为
mutation
命令
build
sdnext build next build执行顺序:
- 同步生成
actions/** - 根据
fn.route同步生成app/api/actions/** - 再执行后续命令
dev
sdnext dev next dev行为与 build 类似,但会额外监听 shared/** 的新增、修改、删除,并实时同步生成物。
hook
sdnext hook扫描 actions/** 并交互式生成或覆盖 hooks/**。
路径映射
shared/addUser.ts->actions/addUser.tsshared/addUser.ts->app/api/actions/add-user/route.tsshared/admin/addUser.ts->actions/admin/addUser.tsshared/admin/addUser.ts->app/api/actions/admin/add-user/route.ts
说明
- 只处理
.ts、.tsx、.js、.jsx - 生成文件会做幂等比较,内容未变化时不会重复写入
- 删除
shared文件或移除fn.route后,对应生成物会自动清理 sdnext build和sdnext dev会自动把actions/**与app/api/actions/**写入.vscode/settings.json的files.exclude
