本节摘要:环境就绪是学习的起点。本节讲清 Node.js 版本要求、create-next-app 初始化项目的完整流程、项目目录结构(app/ 与 public/ 的作用),以及开发/构建/启动三条核心命令的用途。
阅读完本节,你应当能够:
前端项目初始化是"第一次见面"——目录结构、构建工具、代码规范在这一步定型。Next.js 用 create-next-app 官方脚手架,把 TypeScript、ESLint、Tailwind 等"要不要、装什么"变成交互式选择,避免自己从零拼装。
直觉类比:create-next-app 像"精装房交付"——地基、水电、装修都按最佳实践配好,你拿到钥匙(项目)直接入住(写业务)。
💡 关键直觉:脚手架的价值不是"生成文件",而是"锁定约定"。create-next-app 生成的目录结构就是 Next.js 的"约定"——app/ 放页面、public/ 放静态资源、next.config.js 做配置。理解了约定,任何 Next.js 项目你都能秒懂。
node --version # 需要 18.17+(建议 20+) npm --version # 需要 9+
版本不足时,用 nvm(Node Version Manager)安装新版本:
nvm install 20 nvm use 20
npx create-next-app@latest my-app
交互式选项(按需选择):
| 选项 | 推荐 | 说明 |
|---|---|---|
| TypeScript | 是 | 类型安全,大型项目必备 |
| ESLint | 是 | 代码规范 |
| Tailwind CSS | 是 | 样式方案(2.4 详解) |
| src/ 目录 | 可选 | 用 src/app 还是 app |
| App Router | 是 | 本书主线 |
| 导入别名 | 是 | @/ 指向项目根 |
my-app/ ├── app/ # App Router 根目录(页面都在这里) │ ├── layout.tsx # 根布局(全局框架) │ ├── page.tsx # 首页(/) │ └── globals.css # 全局样式 ├── public/ # 静态资源(图片、favicon) ├── next.config.js # Next.js 配置 ├── tsconfig.json # TypeScript 配置 ├── package.json # 依赖与脚本 └── next-env.d.ts # Next.js 类型声明
关键目录:
app/:所有页面、布局、API 路由的所在地(文件即路由);public/:直接通过 /xxx.png 访问的静态资源;next.config.js:图片域名、重定向、环境配置等。npm run dev # 启动开发服务器,默认 http://localhost:3000 # 支持热更新(改代码自动刷新)
开发模式特性:错误提示直观(页面直接显示报错与堆栈)、热模块替换(HMR)、增量编译(只编译改动的部分)。
npm run build # 生产构建:编译、预渲染、生成优化产物 npm run start # 启动生产服务器(需先 build)
build 输出的关键信息:
Route (app) Size First Load JS ┌ ○ / 1.2 kB 89.3 kB ├ ƒ /posts/[id] 1.4 kB 90.1 kB └ ○ /about 900 B 88.7 kB ○ (Static) 静态预渲染(SSG) ƒ (Dynamic) 服务端渲染(SSR/动态)
看懂标记是第 1.1 节渲染模型的实操验证:○ 是构建时生成的静态页面,ƒ 是请求时才渲染的动态页面。
{ "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" } }
| 误区 | 现象 | 正解 |
|---|---|---|
| Node 版本过低 | 脚手架报错/依赖装不上 | 用 nvm 升级到 18.17+ |
| 端口被占用 | 启动报 EADDRINUSE | npm run dev -- -p 3001 换端口 |
| 改了代码不生效 | 缓存问题 | 重启 dev 或清 .next 目录 |
| 找不到 app 目录 | 用了 Pages Router 旧项目 | 确认是 App Router 项目 |
| 构建失败 | 类型错误/导入错误 | 看 build 输出顶部错误信息 |
# 1. 初始化(约 1-2 分钟) npx create-next-app@latest my-app --typescript --tailwind --eslint --app # 2. 进入目录并启动 cd my-app npm run dev # 3. 浏览器访问 http://localhost:3000 # 看到 Next.js 默认欢迎页即成功 # 4. 修改首页 # 编辑 app/page.tsx,把内容改成: export default function Home() { return ( <main> <h1>我的第一个 Next.js 页面</h1> <p>文件即路由——这个文件就是首页。</p> </main> ); }
保存后浏览器自动刷新,看到新内容——开发闭环已打通。
# 5. 查看构建标记(理解渲染模型) npm run build # 观察输出的 ○ / ƒ 标记
建议:把默认生成的 app/page.tsx 全部清空重写一遍,再添加 app/about/page.tsx 试试多页面——动手把"文件即路由"变成肌肉记忆。
npx create-next-app@latest,推荐 TypeScript + ESLint + Tailwind + App Router。○ 静态预渲染、ƒ 动态渲染——渲染模型的实操验证。跑通 create-next-app 后,理解背后发生了什么,能帮你排查问题。
Next.js 的构建流程(npm run build 时):
开发模式(dev)的区别:不做完整预渲染,而是按需编译——你访问哪个页面才编译哪个,配合热更新(改代码即时生效)。这就是为什么 dev 启动快、build 慢。
常见报错解读:
| 报错 | 含义 | 处理 |
|---|---|---|
| EADDRINUSE | 端口被占 | 换端口或关占用程序 |
| Module not found | 导入路径错 | 检查 import 路径与文件位置 |
| 类型错误 | TS 校验失败 | 修复类型(build 前会检查) |
| 磁盘空间不足 | .next 缓存大 | 删 .next 重新 build |
next.config.ts 的角色:它是"构建时配置"——图片域名白名单、重定向、实验特性都在这。配置改动后需要重启 dev 生效。
建议:把 npm run build 变成"提交前必跑"的习惯——build 通过 = 类型正确 + 路由无冲突 + 构建无错误,这是最便宜的"上线前体检"。
开发用 dev 热更新,上线前 build 验证(类型、路由、预渲染),生产用 start 运行。
问:create-next-app 每个选项都什么意思?
TypeScript(类型安全,建议开)、ESLint(代码规范)、Tailwind(样式方案)、src 目录(代码放 src/ 下)、App Router(本书主线)、导入别名(@/ 快捷路径)。不确定的选项保持默认即可。
问:dev 和 build 有什么区别?
dev 是开发模式:按需编译、热更新、错误提示直观;build 是生产构建:全量编译、预渲染、代码分割。上线必须 build + start。
问:改了代码不生效怎么办?
先确认是 dev 模式;改 next.config.ts 或环境变量需要重启;清 .next 目录后重启可解决大部分缓存问题。
问:npm 安装太慢/失败?
用国内镜像:`npm config set registry 「相关地址请参见官方文档」