Project Icon

next-enterprise

Next.js企业级开发框架 集成优化实践

next-enterprise是一个功能丰富的Next.js企业级开发框架。它集成了TypeScript、Tailwind CSS、ESLint等主流技术,提供性能优化、代码质量、测试、部署等多方面的最佳实践。该框架还包含组件库、状态管理、环境变量处理等实用功能,可帮助开发者快速构建高质量的大型应用,提升开发效率。

Next.js 企业级样板
GitHub Actions 工作流状态 GitHub 许可证 GitHub 贡献者 Discord Blazity

欢迎使用 Next.js 企业级样板,这是一个面向企业项目的开源模板!它包含了许多功能,可以帮助你构建高性能、易维护且令人愉悦的应用。我们已经为你完成了所有繁重的工作,所以请放松,准备好用你的出色应用征服世界吧!🌍

[!注意] Blazity 是一群 Next.js/Headless 专家。如果你想讨论你的项目或只是想和我们聊天,请通过 contact@blazity.com 联系我们

特性

使用这个模板,你将获得所有你需要的优秀功能:

目录

🎯 开始使用

要开始使用这个样板,请按照以下步骤操作:

  1. Fork 并克隆仓库:
## 别忘了先 ⭐ 点赞并 fork :)
git clone https://github.com/<your_username)/next-enterprise.git
  1. 安装依赖:
yarn install --frozen-lockfile
  1. 运行开发服务器:
yarn dev
  1. 在浏览器中打开 http://localhost:3000 查看结果。

  2. 这个项目使用 git hook 来强制执行约定式提交。要安装 git hook,请在项目根目录运行以下命令:

brew install pre-commit
pre-commit install -t commit-msg

🚀 部署

通过点击下面的按钮,轻松使用 Vercel 部署你的 Next.js 应用:

Vercel

📃 脚本概述

package.json 中提供了以下脚本:

  • dev: 启动开发服务器并输出彩色日志
  • build: 构建生产环境的应用
  • start: 启动生产服务器
  • lint: 使用ESLint进行代码检查
  • lint:fix: 自动修复代码检查错误
  • prettier: 检查代码格式是否规范
  • prettier:fix: 自动修复格式问题
  • analyze: 分析客户端、服务器和边缘环境的包大小
  • storybook: 启动Storybook服务器
  • build-storybook: 构建可部署的Storybook
  • test: 运行单元测试和集成测试
  • e2e:headless: 以无头模式运行端到端测试
  • e2e:ui: 以UI模式运行端到端测试
  • format: 使用Prettier格式化代码
  • postinstall: 应用补丁到外部依赖
  • preinstall: 确保项目使用Yarn安装
  • coupling-graph: 生成组件的耦合和内聚图

🔗 耦合图

coupling-graph脚本是一个有用的工具,可以帮助可视化项目内部模块之间的耦合和连接。它使用Madge库构建。要生成图表,只需运行以下命令:

yarn coupling-graph

这将创建一个graph.svg文件,其中包含组件之间连接的图形表示。您可以使用任何支持SVG的查看器打开该文件。

graph

🧪 测试

这个样板项目包含各种测试设置,以确保应用程序的可靠性和稳健性。

运行测试

  • 单元和集成测试:使用yarn test运行Jest测试
  • 端到端测试(无头模式):使用yarn e2e:headless以无头模式运行Playwright测试
  • 端到端测试(UI模式):使用yarn e2e:ui以UI模式运行Playwright测试
image

验收测试

为了编写验收测试,我们利用Storybook的play函数。这允许您与组件交互并在Storybook中测试各种用户流程。

/*
 * 查看 https://storybook.js.org/docs/react/writing-stories/play-function#working-with-the-canvas
 * 了解更多关于使用canvasElement查询DOM的信息
 */
export const FilledForm: Story = {
  play: async ({ canvasElement }) => {
    const canvas = within(canvasElement)

    const emailInput = canvas.getByLabelText("email", {
      selector: "input",
    })

    await userEvent.type(emailInput, "example-email@email.com", {
      delay: 100,
    })

    const passwordInput = canvas.getByLabelText("password", {
      selector: "input",
    })

    await userEvent.type(passwordInput, "ExamplePassword", {
      delay: 100,
    })
    // 查看 https://storybook.js.org/docs/react/essentials/actions#automatically-matching-args 了解如何在Actions面板中设置日志记录
    const submitButton = canvas.getByRole("button")

    await userEvent.click(submitButton)
  },
}

冒烟测试

在这个样板项目中,我们使用Storybook内置的冒烟测试支持,以验证组件能否正确渲染且没有错误。只需运行yarn test-storybook即可执行冒烟测试。请记住只用JSX或TSX格式编写stories。冒烟测试和许多其他功能对MDX格式的stories支持不佳。

🎨 样式和设计系统

这个样板项目使用Tailwind CSS进行样式设计,并使用CVA创建强大且易用的设计系统。如果您想了解更多关于此设置的信息,请查看Vercel的这个精彩视频:

Styling and Design System

CVA - 变体的新方法

虽然像StitchesVanilla Extract这样的CSS-in-TS库非常适合构建类型安全的UI组件,但它们可能并不适合所有人。您可能更喜欢对样式表有更多控制权,需要使用Tailwind CSS等框架,或者simply喜欢编写自己的CSS。

使用传统CSS创建变体可能是一项繁琐的任务,需要手动将类与属性匹配并添加类型。CVA就是为了解决这个问题而生的,让您可以专注于UI开发中令人愉快的方面。通过提供一种简单且类型安全的方式来创建变体,CVA简化了这个过程,并帮助您创建强大的设计系统,而不会牺牲CSS的灵活性和控制力。

💾 状态管理

虽然这个样板项目没有包含特定的状态管理库,但我们认为选择最适合您项目需求的库至关重要。以下是我们推荐的一些状态管理库:

Zustand

Zustand是一个小巧、快速且可扩展的状态管理库。它设计简单直观,非常适合中小型项目。它还针对包大小进行了优化,确保对应用程序性能的影响最小。

Jotai

Jotai是一个基于原子的React状态管理库,专注于提供最小化和直观的API。其基于原子的方法允许您以细粒度的方式管理状态,同时仍然高度优化包大小。

Recoil

Recoil是Facebook专为React应用程序开发的状态管理库。通过利用原子和选择器,Recoil允许您高效地管理状态和派生状态。其主要优势是能够只在订阅的状态发生变化时更新组件,减少不必要的重新渲染,保持应用程序的快速和高效。Recoil还提供了内置的调试工具,为开发者提供了良好的开发体验。

选择最适合您的需求和项目结构的库,以确保为您的应用程序提供高效的状态管理解决方案。

🤖 ChatGPT代码审查

我们集成了创新的ChatGPT代码审查,用于AI驱动的自动代码审查。这个功能提供实时的代码反馈,帮助提高代码质量并捕捉潜在问题。

要使用ChatGPT代码审查,请添加一个OPENAI_API_KEY环境变量,其中包含来自OpenAI平台的适当密钥。有关设置详情,请参阅文档中的使用GitHub Actions部分。

image

💻 环境变量处理

T3 Env是一个库,提供构建时的环境变量检查、类型验证和转换功能。它确保您的应用程序使用正确的环境变量,并且它们的值符合预期类型。您再也不会因为不正确的环境变量使用而遇到运行时错误。

配置文件位于env.mjs。只需设置您的客户端和服务器变量,然后从项目中的任何文件导入env即可。

export const env = createEnv({
  server: {
    // 服务器变量
    SECRET_KEY: z.string(),
  },
  client: {
    // 客户端变量
    API_URL: z.string().url(),
  },
  runtimeEnv: {
    // 分配运行时变量
    SECRET_KEY: process.env.SECRET_KEY,
    API_URL: process.env.NEXT_PUBLIC_API_URL,
  },
})

如果未设置所需的环境变量,您将收到错误消息:

  ❌ 无效的环境变量:{ SECRET_KEY: [ 'Required' ] }

🤝 贡献

我们随时欢迎贡献!要参与贡献,请遵循以下步骤:

  1. Fork 仓库。
  2. 创建一个具有描述性名称的新分支。
  3. 进行更改,并使用约定式提交格式提交它们。
  4. 将更改推送到 fork 的仓库。
  5. 创建一个拉取请求,我们将审查您的更改。

支持

如果您需要帮助或只是想分享您对项目的想法,我们鼓励您加入我们的 Discord 社区。这是链接:https://blazity.com/discord。这是一个交流想法和互相帮助的空间。我们感谢每个人的贡献,期待欢迎您的加入。


Blazity Discord Banner

📜 许可证

本项目采用 MIT 许可证。有关更多信息,请参阅LICENSE文件。

贡献者

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号