next.js项目如何组织代码结构
每次新开一个next.js项目,我都在纠结如何组织代码结构,一直没有一个很满意的方案
今天问了下grok,我觉得我得到了目前为止,我最满意的方案
my-next-app/├── app/ # Next.js 13+ App Router 目录│ ├── (auth)/ # 认证相关页面(如登录、注册)│ │ ├── login/ # 登录页面│ │ │ ├── page.tsx # 页面组件│ │ │ ├── layout.tsx # 登录页面布局│ │ ├── register/ # 注册页面│ ├── (dashboard)/ # 仪表盘相关页面│ │ ├── page.tsx # 仪表盘主页│ │ ├── settings/ # 设置页面│ ├── layout.tsx # 根布局│ ├── page.tsx # 首页│ ├── globals.css # 全局样式├── components/ # 可复用的 UI 组件│ ├── common/ # 通用组件(如按钮、输入框)│ │ ├── Button.tsx│ │ ├── Input.tsx│ ├── feature/ # 特定功能组件│ │ ├── UserCard.tsx│ │ ├── Chart.tsx├── lib/ # 工具函数、API 调用、配置等│ ├── api/ # API 调用逻辑│ │ ├── auth.ts│ │ ├── user.ts│ ├── utils/ # 通用工具函数│ │ ├── formatDate.ts│ ├── db/ # 数据库连接/查询│ │ ├── prisma.ts├── types/ # TypeScript 类型定义│ ├── user.ts│ ├── api.ts├── public/ # 静态资源│ ├── images/│ ├── favicon.ico├── styles/ # 样式文件(如果不用 globals.css)│ ├── tailwind.css│ ├── components/ # 组件特定样式├── hooks/ # 自定义 React Hooks│ ├── useAuth.ts│ ├── useFetchData.ts├── middleware.ts # Next.js 中间件├── next.config.js # Next.js 配置文件├── tsconfig.json # TypeScript 配置文件├── package.json├── README.mdapp: 页面目录,页面嵌套的逻辑也承担了路由的功能,尽可能在app里只放page和layout文件
components: 组件目录,组件目录分了2个子目录,common和feature,分这2个子目录解决了一些我的困扰,例如我有时候会不清楚一些业务组件到底应不应该放在components里面,但是有这2个子目录我就可以把常规的通用组件放common里,业务组件放feature里
lib: lib目录主要存放一些通用逻辑和工具类,子目录包含api、utils等,可能一般项目不会有db目录,之前我都是把api和utils单独作为一级目录,我觉得不够优雅,放lib里明显优雅很多
types: 不用多说,如果是写ts,这是必备的
public: 约定俗成的存放静态资源的目录
styles: 存放样式文件,除了globals.css之外的css文件可以放这里,不过一般用tailwind.css不会写太多css文件
hooks: 这个hooks目录我也没想到的,我一直把hook写在了组件里,时间久了其实组件代码不是很好维护,很杂乱, 但是如果组件如果UI和逻辑处理分离了,代码会变得非常好维护并且优雅
我问了一下grok hook目录到底怎么用,他的回答:
在 Next.js 项目中,hooks/ 目录用于存放自定义 React Hooks,这些 Hooks 封装了可复用的状态逻辑或副作用逻辑。它的主要作用是:
hooks/ 目录通常存放以 use 开头的 TypeScript/JavaScript 文件,例如 useAuth.ts、useFetchData.ts 等,每个文件定义一个或多个相关的 Hooks。
为什么要用 hooks/ 目录?
