有关我们从 ReactJS 迁移到 NextJS 的一切

2025-06-08

有关我们从 ReactJS 迁移到 NextJS 的一切

大家好👋,

两个月前,我们在十一月发布会上宣布了技术迁移。从那时起,我就计划写这篇博客,但觉得需要花些时间才能更清楚地了解所有情况。由于现在情况已经相当稳定(但我们仍在改进),所以我想分享一下整个思考过程以及我们是如何做出决策的。

剧透预警!本文涵盖了我们做出这一决定背后的大部分想法和过程,可能不会深入探讨技术层面,但请继续往下读,最终它绝对值得一读!

React 是最流行的 JavaScript 库之一,如今已广泛应用于众多应用程序,而 NextJS 则是基于 ReactJS 构建的框架。只有真正使用 Next,你才能真正体会到它的强大之处,这完全是我自己的经验之谈!

我使用 React 已经三年多了,一直很喜欢它的工作方式。所以,当我们从零开始构建Peerlist时,React 是我的不二之选。由于处于 MVP 阶段,我们决定发挥各自的优势(当然,前端是 React),用 ReactJS 构建第一个可运行的原型。

起初,这种方法很有效,我们能够在规定时间内交付产品,一切进展顺利。但很快我们就意识到,使用纯 React 的决定对我们来说并不理想。我们知道,这个技术栈无法与我们现有的产品路线图兼容。

为什么?

所有技术和框架都很棒,但它们是为了满足不同的用例而创建的。所以当我说普通的 React 不适合我们时,我考虑的是以下用例:

我们需要一个更加有利于 SEO 的框架。

React 在创建单页应用方面非常出色,但 Google 爬虫很难索引并完整处理应用的 JavaScript。这会开始影响你的 SEO。对于像Peerlist这样的网站来说,用户的内容才是最重要的。

我们希望当有人搜索您或与您拥有类似技能的专业人士时,您的 Peerlist 个人资料能够出现在搜索结果的前 5 位。为了显示您的 Peerlist 个人资料,我们必须破解 Google 搜索算法。

我们都知道,SEO 的构建需要花费大量时间,而我们最初的几个月就因为没有被 Google 收录和排名而损失了。这成了我们交易的败笔!

服务器端渲染支持。

我们有两个非常特殊的用例需要我们的应用支持服务器端渲染 (SSR)。其中一个是我上面提到的 SEO,另一个是自定义社交预览。例如:

当您分享您的个人资料时,Peerlist 的社交预览。

对于像 Peerlist 这样专注于突出用户数据的网站,我们需要为每个用户个人资料链接定制社交预览。如果我想分享我的个人资料链接,我的信息应该在平台上突出显示。你一定见过 GitHub、DEV 和 Hashnode 等网站上有这样的自定义社交预览。

这两个功能都需要 SSR,但我们还没有找到一个好的、健壮的、可扩展的解决方案来满足我们将 React 应用程序转变为 SSR 的要求。

路由

React 应用严重依赖 React-Routers。虽然 React Router 是一个处理路由的优秀库,但我们开始发现使用它来维护和遵循条件路由存在困难。虽然 React Router 的实现更精细一些,但我们开始寻找更易于维护、实现和扩展的方案。

JavaScript 生态系统

在我们之前的实施中,我们的后端是用 Springboot 和 Postgresql 开发的。这是一个非常棒的组合,我们几乎没有遇到任何困难。尽管如此,我们还是决定完全迁移到 JavaScript 生态系统。这主要是为了方便开发,并充分利用单一项目结构和 MongoDB 的优势。

但接下来呢?下一步。

NextJS

考虑到所有这些用例,我们认为 Nextjs 是我们的理想之选。Next一个自成体系的框架,它为 SEO、SSR、路由和 API 路由提供开箱即用的支持,可用于创建无服务器 API。我们想要所有这些功能,并且还希望获得性能优势。

特别是这些是我们在选择 Next 时考虑的好处

  • SEO 和图像优化。
  • 优化捆绑和代码拆分,以提高应用程序性能。
  • 非常直观和动态的页面路由。
  • API 路由支持无服务器 API。
  • 内置服务器端渲染支持。
  • 使用 React 构建的框架

迁移过程和我们面临的挑战

我们开始了解早期实施的缺点,但问题是什么时候才是迁移的最佳时机?

简单介绍一下背景:两个月前,我们刚刚发布了应用的封闭测试版,目前正在发布新功能、进行测试,并收集越来越多的用户反馈。那么,我们究竟该在发布新功能还是迁移之间做出选择呢?

由于工程团队规模很小(🧑‍💻x2),同时进行两项工作并非可行。但迁移意味着我们必须暂停功能开发。尽管如此,我们还是决定继续迁移,因为越早越好!

考虑到早期的 React.js 项目,前端迁移会更容易一些。之前的大多数组件都是可复用的。我们认为唯一的区别在于以下四个方面:

  • 从 React Router 迁移到原生 Next Router
  • 为某些页面添加 SSR
  • 按照下一步更改文件夹结构
  • 为元标记创建自定义头部组件以改善 SEO

由此看来,前端迁移似乎相当简单。只需要从头开始编写后端即可。正如我之前提到的,我们之前的后端是基于 Springboot 和 Postgresql 的,将其迁移到带有 MongoDB 的 JavaScript API 意味着需要从头开始编写和构建所有内容。

考虑到时间和资源的限制,我们决定在这次迁移中原封不动地复制所有内容,不做任何修改。因为我们想尽快完成迁移,并在之后持续改进。但话说回来,谁能控制开发人员重构代码和实现的冲动呢?

但积极的一面是,这次迁移让我们有机会改进实施方法。我们的系统变得更加完善和稳定。虽然这些改进让我们错过了迁移截止日期,但系统整体的改进值得我们付出这些努力。

如果我需要总结整个迁移过程并写下经验教训,那么以下是:

  • 最初,我总觉得我们应该在第一次尝试时多加考虑选择正确的技术栈。但请记住,你的第一次尝试永远不会是一个精致完美的产品(这就是为什么它被称为原型!)。你已经在测试你的想法了,所以你可以发挥自己的优势,选择你最擅长的技术栈。
  • 任何系统都不可能完美无缺!我们都见过知名应用中的 bug,也见过我们认为理想的应用崩溃,所以你只需要尽最大努力创造出一个好东西。bug 和功能一样,都是软件的一部分,关键在于改进系统,尽量减少 bug,而不是打造一个完美的系统。
  • 代码重构和改进固然好,但时间限制至关重要。否则,我们就会掉进“兔子洞”。

这就是我想分享的迁移过程的全部内容。为了使其更具现实意义,我特意减少了文章的技术性,更多地介绍了我们经历的思考过程。如果您想了解迁移过程中的任何特定部分,请在评论区留言。我一定会在下一篇文章中详细介绍。

到那时,继续探索吧!✌️

如果您喜欢我的文章,也可以在Twitter上联系我,或者请我喝杯咖啡。我每周二都会发布一篇关于 Web 开发、前端、我的学习以及一些有趣的想法的文章。

鏂囩珷鏉ユ簮锛�https://dev.to/hey_yogini/everything-about-our-migration-from-reactjs-to-nextjs-1eac
PREV
开始使用 Tailwind 和 React:实现响应能力。
NEXT
作为开发人员,如何估算任务完成的时间?