Next.js 实战 (一):项目搭建指南

简介: 这篇文章介绍了作者在2024年下半年计划使用Next.js从零开始搭建一个后台模板,以探索Next.js的奥秘。文章包含了项目搭建、目录结构、APP路由约定、配置Eslint、Prettierrc、Husky等项目提交规范、使用release-it自动管理版本号和生成CHANGELOG、import排序规则、安装NextUI等内容。作者还提到会在开发过程中记录遇到的问题和解决方法,并计划在后期使用Prisma+Supabase数据库存储数据,最终完成一个基于Next.js的全栈项目。

前言

时间过得好快,一下就来到2024下半年了。

上半年我为了学习 Nuxt3,从 0 到 1 开发了一个导航网站:Dream Site,目前主要的功能都已完成了,后续有时间再慢慢添加有趣的功能。

下半年开始进攻 Next.js,前段时间我使用 Next.js 重构了一个项目:今日热榜,对 Next.js 有一定的认识,这次打算完整地从 0 到 1 搭建一个后台模板,进而探索 Next.js 的奥秘。

项目搭建

  1. 官方建议使用 create-next-app 启动一个新的 Next.js 应用程序:

    npx create-next-app@latest
    
  2. 安装时,你将看到以下提示:

    What is your project named? my-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 to use `src/` directory? No / Yes
    Would you like to use App Router? (recommended) No / Yes
    Would you like to customize the default import alias (@/*)? No / Yes
    What import alias would you like configured? @/*
    

    Next.js现在默认附带 TypeScript、ESLint 和 Tailwind CSS 配置。

  3. 项目运行

    pnpm dev
    

目录结构

📄 next.config.js // Next.js的配置文件
📄 package.json // 项目依赖项和脚本
📄 instrumentation.ts // OpenTelemetry and Instrumentation 文件
📄 middleware.ts // Next.js请求中间件
📄 .env // Environment variables 环境变量
📄 .env.local // 局部环境变量
📄 .env.production // 生产环境变量
📄 .env.development // 开发环境变量
📄 .eslintrc.json // ESLint 的配置文件
📄 .gitignore // 要忽略的 Git 文件和文件夹
📄 next-env.d.ts // 用于 Next.js 的 TypeScript 声明文件
📄 tsconfig.json // TypeScript 的配置文件
📄 jsconfig.json // JavaScript 的配置文件

APP 路由约定

📄 layout[.js,.jsx,.ts] // Layout 布局
📄 page[.js,.jsx,.ts] // Page 页
📄 loading[.js,.jsx,.ts] // Loading UI 加载 UI
📄 not-found[.js,.jsx,.ts] // Not found UI 未找到 UI
📄 error[.js,.jsx,.ts] // Error UI 错误 UI
📄 global-error[.js,.jsx,.ts] // Global error UI 全局错误 UI
📄 route[.js,.ts] // API endpoint API 端点
📄 template[.js,.jsx,.ts] // Re-rendered layout 重新渲染的布局
📄 default[.js,.jsx,.ts] // 并行路由回退页面

更多约定请参考:App Routing Conventions

开发规范

这些配置在以前的文章写过,就不重复了,需要的可以参考下

  1. 配置 Eslint、Prettierrc、Husky等项目提交规范
  2. 使用 release-it 自动管理版本号和生成 CHANGELOG
  3. 使用 sort-imports 排序规则美化头部 import 代码

安装 NextUI

  1. 根目录运行

    pnpm add @nextui-org/react framer-motion
    
  2. 新建 .npmrc 文件,并写入以下内容

    public-hoist-pattern[]=*@nextui-org/*
    
  3. tailwind.config.js 配置文件添加代码:

    import {
         
          nextui } from '@nextui-org/react';
    import type {
         
          Config } from 'tailwindcss';
    
    const config: Config = {
         
         
    darkMode: 'class',
    content: [
     './node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}',
    ],
    theme: {
         
         
     extend: {
         
         }
    },
    plugins: [nextui()],
    };
    export default config;
    
  4. 在根节点添加 NextUIProvider

    import './globals.scss';
    
    import {
         
          NextUIProvider } from '@nextui-org/react';
    import type {
         
          Metadata } from 'next';
    import {
         
          Inter } from 'next/font/google';
    
    const inter = Inter({
         
          subsets: ['latin'] });
    
    export const metadata: Metadata = {
         
         
    title: 'next-admin',
    description: '基于 Next.js 开发的后台模板',
    };
    
    export default function RootLayout({
         
         
    children,
    }: Readonly<{
         
         
    children: React.ReactNode;
    }>) {
         
         
    return (
     <html lang="zh-cn">
       <body className={
         
         inter.className}>
         <NextUIProvider>{
         
         children}</NextUIProvider>
       </body>
     </html>
    );
    }
    

总结

后续开发会以 Next.js 为核心,开发一个类似 Xmw-Admin 项目的功能,为此来探索 Next.js 其中的奥秘:

aayo85jz6b9oajqv3pps03zcp16igkxn.png

我会在此基础上加入我的一些设计和想法,致力于提高用户体验。

开发周期可能会有点长,但我会记录在开发中所遇到的问题和解决的办法,并记录在 Nuxt实战系列 中,后期会打算使用 Prisma + Supabase 数据库存储数据,最终完成一个基于 Next.js 的全栈项目。

相关文章
|
2月前
|
设计模式 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 设计模式与实战应用
【4月更文挑战第30天】本文探讨JavaScript设计模式在提升开发效率和代码质量中的关键作用。涵盖单例、工厂、观察者、装饰器和策略模式,并通过实例阐述其在全局状态管理、复杂对象创建、实时数据更新、功能扩展和算法切换的应用。理解并运用这些模式能帮助开发者应对复杂项目,提升前端开发能力。
|
2月前
|
JavaScript 前端开发 算法
JavaScript 中的 if 判断:深入理解、实战应用与进阶技巧
【4月更文挑战第7天】探索 JavaScript 中的 if 判断语句,它是构建逻辑清晰程序的基础。了解其概念、语法、应用示例及编程技巧,包括条件控制、else if 结构、三目运算符。注意条件表达式简洁性,避免 falsy 值陷阱,利用逻辑运算符优化,并减少 if 嵌套。实践这些技巧将提升编程能力和代码质量。
43 0
|
18天前
|
前端开发 JavaScript Java
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
23 3
|
2月前
|
数据可视化 JavaScript 架构师
D3.js实战:数据可视化高级技巧实例应用
本文介绍了D3.js入门,包括创建HTML文件引入库、绘制简单线图、柱状图和饼图。示例展示了数据绑定、交互性和动画效果,如柱状图的悬停效果和线图的数据平滑过渡。此外,还提及力导向图和地图可视化的实现,以及使用Enter, Update, Exit模式进行动态更新。最后提到了复杂图表和高级技巧,如使用组件库、动画、交互性和性能优化。
40 0
|
16天前
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
31 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
|
9天前
|
移动开发 前端开发 JavaScript
HTML5+CSS3+JavaScript网页实战
HTML5+CSS3+JavaScript网页实战
|
24天前
|
数据库 数据安全/隐私保护 Python
Web实战丨基于django+html+css+js的电子商务网站
Web实战丨基于django+html+css+js的电子商务网站
42 3
|
24天前
|
前端开发 安全 数据安全/隐私保护
Web实战丨基于django+html+css+js的在线博客网站
Web实战丨基于django+html+css+js的在线博客网站
29 2
|
2天前
【wavesurfer.js实战范例】多区域音频标注(含区域实时切换显示)
【wavesurfer.js实战范例】多区域音频标注(含区域实时切换显示)
10 0
|
2月前
|
JavaScript 前端开发 程序员
web前端入门到实战:32道常见的js面试题(1),面试哪些
web前端入门到实战:32道常见的js面试题(1),面试哪些