Next.js 16 Beta 版本已经发布,这次更新带来了很多重要变化。对于正在使用 Next.js 的开发者来说,了解这些变化非常重要,因为它们可能会影响现有项目。
Vercel 公司宣布,Turbopack 现在成为 Next.js 的默认构建工具。他们表示 Turbopack 能提供更快的构建速度,开发时的热更新也比之前快很多。
但这个变化也带来一些问题:
如果你在项目中使用了自定义的 webpack 配置,这些配置可能无法直接使用。现在如果你想继续使用 Webpack,需要在命令中特别指定:
next dev --webpack
next build --webpack
另外,一些第三方插件可能还不支持 Turbopack,这可能导致兼容性问题。
1. 更多的异步操作
现在很多 api 都需要使用 async/await:
// 之前的写法
export default function Page({ params, searchParams }) {
const id = params.id;
}
// 现在的写法
export default async function Page({ params, searchParams }) {
const { id } = await params;
const query = await searchParams;
}
// 其他 API 调用也一样
const cookieStore = await cookies();
const headersList = await headers();
这个变化影响比较大,现有项目可能需要大量修改代码。
2. Node.js 版本要求提高
Next.js 16 要求最低 Node.js 版本是 20.9.0。如果你的生产环境还在使用 Node.js 18,就需要先升级 Node.js 版本。
对于企业项目来说,升级 Node.js 版本可能需要较长的审批流程,这会延迟 Next.js 的升级。
3. 实验性功能被移除
之前的一些实验性功能被移除了,比如 PPR(Partial Prerendering)。如果你在项目中使用了这些功能,升级后可能会遇到问题。
缓存相关的 API 也有调整:
// 之前的写法
revalidateTag('products');
// 现在的写法
revalidateTag('products', 'max'); // 长期缓存
revalidateTag('products', 'hours'); // 小时级别缓存
revalidateTag('products', { revalidate: 3600 }); // 自定义时间
新增了 updateTag() 函数,但只能在 Server Actions 中使用:
'use server';
import { updateTag } from 'next/cache';
export async function updateProduct(id: string) {
// 更新产品的逻辑
updateTag(`product-${id}`); // 立即更新缓存
}
Image 组件有一些默认值的变化:
图片缓存时间从 60 秒变为 4 小时
最大重定向次数现在限制为 3 次
图片质量默认统一为 75
默认禁止使用本地 IP 地址
如果需要在开发环境使用本地 IP,必须明确配置:
// next.config.ts
images: {
dangerouslyAllowLocalIP: true,
}
React Compiler 现在成为稳定功能,可以自动优化组件性能,减少不必要的重新渲染。
使用它需要安装额外的 babel 插件:
// next.config.ts
const nextConfig = {
reactCompiler: true,
};
这个功能不是默认开启的,需要手动配置。
Next.js 16 移除了几个旧功能:
AMP 支持完全移除
next lint 命令被移除,建议直接使用 ESLint
Runtime Configs 被移除,改用环境变量
页面滚动行为不再默认添加平滑效果
1. Turbopack 文件系统缓存(测试版)
开发模式下可以缓存编译结果,加快重启速度:
// next.config.ts
experimental: {
turbopackFileSystemCacheForDev: true,
}
2. Build Adapters API(早期版本)
允许自定义构建过程:
// next.config.js
experimental: {
adapterPath: require.resolve('./my-adapter.js'),
}
3. React 19.2 新特性
集成了 React 19.2 的新功能,包括页面切换动画和改进的 Hook。
适合升级的情况:
新开始的项目
项目配置比较简单
团队愿意接受较大的变化
对性能要求很高的项目
建议暂缓升级的情况:
项目中有复杂的 Webpack 自定义配置
使用了被移除的实验性功能
生产环境还在使用 Node.js 18
没有足够时间处理代码改动
依赖的第三方工具可能不兼容 Turbopack
如果你决定升级,建议按以下步骤进行:
备份项目:升级前确保代码已经备份
检查依赖:确认所有依赖包都支持 Next.js 16
逐步测试:先在测试环境验证,不要直接更新生产环境
处理异步改动:根据错误信息逐个修复异步相关的问题
更新配置:调整 next.config.js 中的相关配置
问题1:构建失败
如果构建失败,可以先尝试使用 --webpack 参数:
next build --webpack
问题2:图片不显示
检查 Image 组件的配置,特别是本地 IP 相关的设置。
问题3:API 调用错误
确认所有需要异步调用的地方都加了 await。
Next.js 16 是一个重要的版本更新,带来了性能改进和新功能,但也包含很多破坏性变化。在决定是否升级时,需要权衡新功能带来的好处和升级所需的工作量。
对于新项目,建议直接使用 Next.js 16。对于现有项目,建议先充分测试,确保所有功能都能正常工作后再升级。
无论是否立即升级,都建议了解这些变化,为将来的升级做好准备。技术的发展总是向前推进的,适应变化是开发者必备的能力。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!
Next.js 有一个提供稳定支持的组织,同时在开源世界也非常的活跃。Next.js 使用简单,代码分离,开箱即用。,初始只加载首页,提升性能,改善 SEO(搜索引擎优化)
umi 就是一套零配置,按最佳实践进行开发的前端框架。支持PWA、按需加载、tree-shake、scope-hoist、智能提取公共文件、Critical CSS、preload、hash build、preact 等等
本文的目的不是要对 React、Vue 和 Angular 三者进行比较,已经有许多人对这个话题进行了比较深入的探讨。每个人都有自己的偏好。与其他库和框架相比,我更喜欢使用 React 构建用户界面。 对我来说,这是构建用户界面唯一正确的方法,它让我爱上了 React。
项目开发中, 大多数团队都会选择使用开源的 UI 库, 那么在 next.js 中要引入第三方库. 我们需要进行相应的配置. 在 css 预处理器上, 目前团队使用 scss . 个人觉得非常好用. 如果要使用 scss 我们必须要做简单配置, 否则是无法使用的
应用场景: 考虑到多应用在一个域名下能提高该域名的SEO,所以选择通过域名二级目录形式指向 nextjs应用,这里需要修改 nginx 和 nextjs 配置
Next.js 提供了 Fast-Refresh 能力,它可以为您对 React 组件所做的编辑提供即时反馈。但是,当你通过 Markdown 文件提供网站内容时,由于 Markdown 不是 React 组件,热更新将失效。
在Next.js应用程序中,可以通过使用Prisma / PostgreSQL数据库来保护应用程序免受SQL注入等安全漏洞的威胁。以下是如何实现此目标的一些技术解决方案和代码示例:
10 月 26 日,Next.js 正式发布。该版本的主要更新如下:Turbopack:App & Pages Router 通过 5000 个测试,服务端操作(稳定):逐步增强的数据变更
近期 Node.js 发布了新网站,带来了全新的外观变化。看其技术选型,也是紧跟潮流,用到了最新的 Next.js App Router 框架,版本 ~14.1.3 这是 Next.js 近期的最新版本了,不过看起来同时也在用 Next.js 的 pages 模式。
在 Next.js 中使用 TypeScript 的感觉...一言难尽,当然TypeScript 在 Next.js 中是能用的,但它很脆弱。类型错误像漏水的桶一样层出不穷,你得花一半的时间来说服编译器:是的,我真的知道自己在做什么。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!