环境配置
本章将介绍如何搭建 Next.js 开发环境,创建第一个 Next.js 项目。
前置要求
在开始之前,请确保你的系统已安装:
- Node.js:18.18 或更高版本
- 包管理器:npm、yarn、pnpm 或 bun
- 代码编辑器:推荐 VS Code
检查 Node.js 版本
node -v
# 应该显示 v18.18.0 或更高版本
安装 Node.js
如果尚未安装 Node.js,推荐使用以下方式:
方式一:官网下载
访问 Node.js 官网,下载 LTS 版本。
方式二:使用 nvm(推荐)
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 安装 Node.js
nvm install --lts
# 使用 LTS 版本
nvm use --lts
创建项目
使用 create-next-app
Next.js 提供了官方脚手架工具 create-next-app,可以快速创建新项目:
npx create-next-app@latest my-next-app
交互式配置
运行命令后,会提示选择配置选项:
What is your project named? my-next-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like your code inside a `src/` directory? No / Yes
Would you like to use App Router? No / Yes
Would you like to use Turbopack for `next dev`? No / Yes
Would you like to customize the import alias? No / Yes
推荐配置
对于新项目,推荐以下配置:
- TypeScript:Yes(类型安全)
- ESLint:Yes(代码规范)
- Tailwind CSS:Yes(样式方案)
- src/ 目录:Yes(代码组织)
- App Router:Yes(新路由系统)
- Turbopack:Yes(更快的开发体验)
一键创建
也可以通过命令行参数直接指定配置:
npx create-next-app@latest my-next-app \
--typescript \
--tailwind \
--eslint \
--app \
--src-dir \
--turbopack \
--import-alias "@/*"
项目结构
创建完成后,项目结构如下:
my-next-app/
├── src/
│ └── app/
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx
├── public/
│ └── images/
├── .eslintrc.json
├── .gitignore
├── next.config.ts
├── package.json
├── postcss.config.mjs
├── README.md
├── tailwind.config.ts
└── tsconfig.json
目录说明
| 目录/文件 | 说明 |
|---|---|
src/app/ | App Router 核心目录,存放页面和布局 |
src/app/page.tsx | 首页组件(路由 /) |
src/app/layout.tsx | 根布局组件 |
src/app/globals.css | 全局样式文件 |
public/ | 静态资源目录 |
next.config.ts | Next.js 配置文件 |
tailwind.config.ts | Tailwind CSS 配置 |
tsconfig.json | TypeScript 配置 |
启动开发服务器
进入项目目录,启动开发服务器:
cd my-next-app
npm run dev
终端会显示:
▲ Next.js 15.0.0
- Local: http://localhost:3000
- Environments: .env
✓ Starting...
✓ Ready in 1.2s
打开浏览器访问 http://localhost:3000,你将看到 Next.js 欢迎页面。
核心文件解析
page.tsx - 页面组件
// src/app/page.tsx
export default function Home() {
return (
<main className="flex min-h-screen flex-col items-center justify-center">
<h1 className="text-4xl font-bold">Hello Next.js!</h1>
</main>
);
}
说明:
page.tsx是路由页面组件- 文件位置决定路由路径
- 必须默认导出一个 React 组件
layout.tsx - 布局组件
// src/app/layout.tsx
import type { Metadata } from "next";
import "./globals.css";
export const metadata: Metadata = {
title: "我的 Next.js 应用",
description: "使用 Next.js 构建",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="zh-CN">
<body>{children}</body>
</html>
);
}
说明:
layout.tsx定义页面共享布局- 根布局必须包含
<html>和<body>标签 - 可以定义页面元数据(metadata)
globals.css - 全局样式
/* src/app/globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
/* 自定义全局样式 */
body {
font-family: system-ui, sans-serif;
}
Turbopack 详解
Turbopack 是 Next.js 15 及更高版本的默认构建工具,专为 JavaScript 和 TypeScript 优化的增量打包器,使用 Rust 编写。
为什么选择 Turbopack?
Turbopack 解决了传统打包工具的几个核心问题:
统一的依赖图:Next.js 支持多种输出环境(客户端和服务端),管理多个编译器并拼接打包结果非常繁琐。Turbopack 使用单一的统一依赖图处理所有环境。
打包 vs 原生 ESM:一些工具在开发时跳过打包,依赖浏览器的原生 ESM。这对小型应用有效,但大型应用会因为过多的网络请求而变慢。Turbopack 在开发时进行打包,但采用优化方式保持大型应用的快速响应。
增量计算:Turbopack 跨核心并行工作,并将结果缓存到函数级别。一旦完成某项工作,Turbopack 不会重复执行。
延迟打包:Turbopack 只打包开发服务器实际请求的内容。这种延迟方法可以减少初始编译时间和内存使用。
默认启用
从 Next.js 16 开始,Turbopack 是默认的打包器:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
}
如需使用 Webpack,可以通过 --webpack 标志切换:
{
"scripts": {
"dev": "next dev --webpack",
"build": "next build --webpack"
}
}
支持的功能
Turbopack 对常见用例提供零配置支持:
| 功能类别 | 特性 | 支持状态 |
|---|---|---|
| 语言 | JavaScript、TypeScript | ✅ 使用 SWC 编译 |
| ESNext 特性 | ✅ 支持 SWC 覆盖的所有特性 | |
CommonJS (require) | ✅ | |
| ESM (静态/动态 import) | ✅ | |
| Babel | ✅ 检测到配置文件自动启用 | |
| React | JSX/TSX | ✅ |
| Fast Refresh | ✅ 无需配置 | |
| React Server Components | ✅ | |
| 样式 | 全局 CSS | ✅ |
| CSS Modules | ✅ 使用 Lightning CSS | |
| CSS 嵌套 | ✅ | |
| PostCSS | ✅ 自动处理配置文件 | |
| Sass/SCSS | ✅ 开箱即用 | |
| 资源 | 静态资源(图片、字体) | ✅ |
| JSON 导入 | ✅ | |
| 解析 | 路径别名 | ✅ 读取 tsconfig.json |
| 手动别名 | ✅ 可配置 | |
| 自定义扩展名 | ✅ 可配置 |
与 Webpack 的主要差异
文件系统根目录:Turbopack 使用根目录解析模块。项目根目录外的文件默认不会被解析。如果使用 npm link 链接依赖,需要配置根目录选项。
CSS Modules 顺序:Turbopack 遵循 JS 导入顺序来排列 CSS Modules。如果样式顺序有问题,可以使用 @import 强制顺序。
Sass 导入语法:Turbopack 不支持 Webpack 的旧版 ~ 语法。需要将 @import '~bootstrap/...' 改为 @import 'bootstrap/...'。
Webpack 插件:Turbopack 不支持 Webpack 插件。依赖插件的工具需要寻找替代方案或继续使用 Webpack。
配置选项
在 next.config.ts 中配置 Turbopack:
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
turbopack: {
// 路径别名
resolveAlias: {
underscore: "lodash",
"@components": "./src/components",
},
// 自定义扩展名
resolveExtensions: [".mdx", ".tsx", ".ts", ".jsx", ".js", ".json"],
},
};
export default nextConfig;
性能调试
如遇到性能或内存问题,可以生成追踪文件:
NEXT_TURBOPACK_TRACING=1 npm run dev
这会在 .next/dev/trace-turbopack 生成追踪文件,可用于向 Next.js 团队报告问题。
版本历史
| 版本 | 变更 |
|---|---|
| Next.js 16.0 | Turbopack 成为默认打包器 |
| Next.js 15.5 | Turbopack 构建支持(Beta) |
| Next.js 15.0 | Turbopack 开发模式稳定 |
| Next.js 13 | Turbopack 实验性引入 |
常用命令
开发命令
# 启动开发服务器(默认使用 Turbopack)
npm run dev
# 启动开发服务器(指定端口)
npm run dev -- -p 4000
# 使用 Webpack 而非 Turbopack
npm run dev -- --webpack
构建命令
# 构建生产版本
npm run build
# 启动生产服务器
npm run start
# 导出静态站点
npm run build && npm run export
其他命令
# 代码检查
npm run lint
# 类型检查
npx tsc --noEmit
VS Code 配置
推荐扩展
安装以下 VS Code 扩展提升开发体验:
- Next.js snippets:代码片段
- Tailwind CSS IntelliSense:Tailwind 智能提示
- ESLint:代码规范检查
- Prettier:代码格式化
settings.json 配置
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"typescript.tsdk": "node_modules/typescript/lib"
}
环境变量
Next.js 支持环境变量,创建 .env.local 文件:
# .env.local
DATABASE_URL="postgresql://localhost:5432/mydb"
API_KEY="your-api-key"
# 客户端可访问的环境变量(以 NEXT_PUBLIC_ 开头)
NEXT_PUBLIC_API_URL="https://api.example.com"
使用环境变量
// 服务端使用
console.log(process.env.DATABASE_URL);
// 客户端使用
console.log(process.env.NEXT_PUBLIC_API_URL);
不要将敏感信息放在 NEXT_PUBLIC_ 开头的环境变量中,这些变量会被打包到客户端代码中。
小结
本章我们学习了:
- 安装 Node.js 和配置开发环境
- 使用 create-next-app 创建项目
- 理解项目结构和核心文件
- 启动开发服务器
- 配置 VS Code 开发环境
- 使用环境变量
练习
- 创建一个新的 Next.js 项目,使用 TypeScript 和 Tailwind CSS
- 修改首页内容,显示你的名字和一段介绍
- 添加一个环境变量并在页面中显示
- 尝试修改布局组件,添加一个页脚