2022年9月8日,星期四
Next.js 12.3
发布者Next.js 12.3 版本带来了一些提升生活品质的改进
- 改进的快速刷新:
.env
、jsconfig.json
和tsconfig.json
文件现在支持热重载。 - TypeScript 自动安装: 添加
.ts
文件即可自动配置 TypeScript 并安装依赖。 - Image 组件:
next/future/image
现在已稳定。 - SWC Minifier: 使用 Next.js 编译器进行代码压缩现在已稳定。
- 新的路由 + 布局更新: 已开始实施,并对新功能进行了解释。
立即更新,运行 npm i next@latest
。
宣布第三届全球 Next.js 社区大会将于 10 月 25 日举行。 立即注册 →
Next.js Conf
诚邀您参加 10 月 25 日举行的全球 Next.js 社区大会。在 Next.js 六周年之际,我们将推出
- 利用 React Server Components、流式处理和 Suspense 的功能。
- 使开发人员更容易优化和扩展应用程序的约定。
- 使本地开发和生产构建更快的开源工具。
申领您的免费门票 并了解 Next.js 和 React 的未来发展,并关注 @nextjs 以获取更多即将发布的公告。我们也在征集社区演讲。 提交演讲提案 并分享您使用 Next.js 构建的故事。
TypeScript 自动安装
Next.js 内置了自动配置 TypeScript 的支持。以前,向现有项目添加 TypeScript 需要手动安装必要的依赖项。
在此版本中,Next.js 会自动检测何时向项目中添加 TypeScript 文件,安装必要的依赖项,并添加 tsconfig.json
文件。这在使用 next dev
和 next build
运行时有效。
改进的快速刷新
快速迭代对于您的本地开发工作流程至关重要。Next.js 使用 快速刷新 ,以便对您对 React 组件所做的编辑提供即时反馈。点击保存,即可在浏览器中看到您的更改,无需重新加载页面。
在 Next.js 12.3 中,现在编辑某些配置文件时也会热重载,包括
.env
和env.*
变体jsconfig.json
tsconfig.json
现在,当您更改这些配置文件时,无需重启本地开发服务器。
Image 组件
next/future/image
组件(稳定版)
在 Next.js 12.2 中,我们分享了一个 新的 Image 组件的实验性预览版,该组件简化了您设置图像样式的方式,并通过使用原生浏览器懒加载来提高性能。
新的 Image 组件现在已稳定,不再需要实验性标志。
自上次发布以来,我们进行了进一步的改进
- 添加了对
fill
布局模式的支持,该模式使图像填充父元素。 - 改进了模糊占位符,使其可以与透明图像一起使用,不再需要
<noscript>
,并且next dev
与next start
匹配。 - 在图像加载时隐藏
alt
文本,防止了细微的布局偏移(Chrome 以外的浏览器)。 - 为提高可访问性,需要
alt
属性。 - 修复了在水合之前发生错误时
onError
属性的问题。 - 修复了仅具有
width
或仅具有height
属性的静态导入图像的纵横比问题。 - 改进了在使用不当设置或配置时的错误消息。
未来,我们计划将 next/image
重命名为 next/legacy/image
,并将 next/future/image
重命名为 next/image
。这将为新的 Next.js 项目提供出色的体验,现有项目将能够使用我们的 next/image
代码转换工具轻松迁移。我们将在下一个主要版本发布之前提供更多详细信息。
有关今天如何使用它的更多信息,请参阅 文档,其中包含迁移指南。
远程模式(稳定版)
remotePatterns
允许您在使用内置图像优化 API 时为远程图像指定通配符。与现有的 images.domains
配置相比,它允许更强大的匹配,后者仅对域名执行精确匹配。
此选项现在已稳定,可以与以下配置选项一起使用
module.exports = {
images: {
remotePatterns: [
{
// The `src` property hostname must end with `.example.com`,
// otherwise the API will respond with 400 Bad Request.
protocol: 'https',
hostname: '**.example.com',
},
],
},
};
禁用图像优化(稳定版)
图像优化 API 需要服务器在请求图像时按需优化图像。当使用 next start
进行自托管或部署到 Vercel 等平台时,这非常有效。但是,这不适用于 next export
,因为它不包含用于优化图像的服务器。以前,您需要使用 loader
属性配置第三方图像优化提供程序,但现在您可以完全禁用图像优化,方法是在所有 next/image
实例的 next.config.js
中进行配置。
以前的实验性选项现在已稳定,可以与以下配置选项一起使用
module.exports = {
images: {
unoptimized: true,
},
};
SWC Minifier(稳定版)
在 Next.js 12 中,我们引入了使用 SWC 进行代码压缩,作为 Next.js Compiler 实验性功能的一部分。早期结果表明,使用 SWC 进行代码压缩比以前使用 Terser 的版本快 7 倍。
在此版本中,该功能已稳定,您可以使用以下 next.config.js
选项选择启用
module.exports = {
swcMinify: true,
};
我们计划在下一个主要版本中将 SWC minifier 设置为默认值。
新的路由和布局更新
今年早些时候,我们发布了 布局 RFC,它介绍了自 2016 年发布以来 Next.js 的最大更新。这些更改包括一个基于 React Server Components 构建的新路由器。实施工作已经开始,我们正在努力在下一个主要版本中发布公开 Beta 版。
今天,我们将分享有关即将推出的功能的更多信息,包括
- 路由组:用于使路由退出布局,并在不影响 URL 路径的情况下组织路由。
- 即时加载状态:新的文件约定,可轻松添加加载 UI,使用 Suspense 构建。
- 错误处理:新的文件约定,可轻松添加嵌套的错误边界和错误 UI。
- 模板:新的文件约定,用于添加共享 UI,该 UI 创建不同的实例且不共享状态。
- 拦截路由、并行路由 和 条件路由:允许您实现高级路由模式的新约定。
此外,在 另一个 RFC 中,我们正在探索在新 app
目录中添加对 全局 CSS 导入 的支持。这将允许您使用导入其自身 .css
文件的包,而无需额外的配置。
在 布局 RFC 中阅读有关这些新功能的更多信息。
其他改进
- 关于 Next.js 内置可访问性功能的新文档。
create-next-app
模板现在自动包含深色模式支持,使用您的系统偏好设置。- 使用 集成的 ESLint 支持 时,
src/
现在是默认的 linting 目录。 next.config.js
现在包含使用ajv
的模式验证,有助于防止配置选项的误用。next.config.js
现在有一个实验性配置标志fallbackNodePolyfills: false
,以防止 Next.js 为浏览器 polyfill Node.js API(这会导致捆绑包大小增加)。此选项将导致 Next.js 显示构建时错误,指出不必要的导入来自何处。
社区
Next.js 是 超过 2,000 名个人开发者、Google Chrome 和 Meta 等行业合作伙伴以及我们在 Vercel 的核心团队共同努力的成果。
此版本由以下贡献者共同完成: @pthomas931, @madmed88, @sanjaiyan-dev, @balazsorban44, @DonghyukJacobJang, @chaiwattsw, @styfle, @dunglas, @ahkhanjani, @promer94, @terrierscript, @shawncal, @insik-han, @QuiiBz, @ykzts, @JoshuaKGoldberg, @lucasassisrosa, @dikwickley, @Brooooooklyn, @sicarius97, @FourwingsY, @manovotny, @SukkaW, @pepoeverton, @jdeniau, @sumiren, @anthonyshew, @pekarja5, @huozhi, @leerob, @fediev, @atcastle, @shuding, @feugy, @jonohewitt, @zakiego, @Schniz, @timneutkens, @wyattjoh, @MaedahBatool, @X7Becka, @nnnnoel, @dcdev67, @alvinometric, @timothympace, @jeferson-sb, @ijjk, @theMosaad, @Yuddomack, @msquitieri, @andreizanik, @nix6839, @thomasballinger, @ziishaned, @xyeres, @nyedidikeke, @maxproske, @sokra, @titusdmoore, @thebergamo, @fikrikarim, @Kikobeats, @clearlyTHUYDOAN, @nasso, @qutek, @kdy1, @kyliau, @housseindjirdeh, @barissayil, @seveibar, @Jessidhia, @santidalmasso, @JohnDaly, @Nikhilnama18, @mduleone, @colinhacks, @ductnn, @josh, @hiro0218, @eltociear, @kwonoj, @valcosmos, @mihaic195, @stefanprobst, @KATT, @thiagomorales, @danielcavanagh, @steven-tey, @hellomhc, @trevor-fauna, @nguyenyou, @eminvergil, @lobsterkatie, @dorian-davis, @sambecker, @isaac-martin, @lfades, @amorimr, @javivelasco, @mongolyy, @Thisen, @zorrolisto, @ethomson, @padmaia, @thisisjofrank, @dominiksipowicz, @awareness481, @pakaponk, @apledger, @longzheng, @tknickman, @rbrcsk, @emersonlaurentino, @carstenlebek, @edusig, @riccardogiorato, @hanneslund, @ryanhaticus, @j-mendez, @armandabric, @WinmezzZ, @andershagbard, @dammy001, @MarDi66, @okmttdhr, @rishabhpoddar, @marjorg, @dustinsgoodman, and @zanechua。