经过足足70个canary版本之后,Next.js 9终于正式发布了!

时间:2020-12-23 12:41:36   收藏:0   阅读:0
经过足足70个canary版本之后,Next.js 9终于正式发布了!

技术图片
源自 | Next.js Blog
译者 | 王强
编辑 | Yonie
经过足足 70 个 canary 版本之后,Next.js 9 正式版终于发布了。新版的主要特性包括:

export default function AboutPage(props) {
return <h3>My AMP About Page!</h3>
}

要选择混合 AMP 呈现,可以使用‘hybrid‘值:

//pages/about.js
import { useAmp } from ‘next/amp‘

export const config = { amp: ‘hybrid‘ }

export default function AboutPage(props) {
const isAmp = useAmp()
return <h3>My About Page!{isAmp ? <> Powered by AMP!</> : ‘‘}</h3>
}


新版删除了 withAmp 高阶组件,为新配置让路。
官方提供了一个 codemod,可以自动将 withAmp 的用法转换为新的配置对象。更多信息可以参阅 升级指南: https://github.com/zeit/next.js/blob/canary/UPGRADING.md
**代码库改进**
新版对一些工具做了一些更改以提供更好的体验。
如前所述,Next.js 核心现在是用 TypeScript 编写的,并且会自动为 Next.js 应用程序生成类型。这对使用 Next.js 构建的应用程序很有用,此外它在处理核心代码库时也很有帮助。现在开发者可以自动获得类型错误和自动完成时。
Next.js 已经拥有了一个规模相当大的集成测试套件,包含 50 多个 Next.js 应用程序,每个应用程序都有针对自己运行的测试。通过这些测试,官方可以确保新版本发布时用户可以顺利升级,因为之前可用的功能是使用同一测试套件测试的。
大多数测试都是集成测试,可以复现“真正的”开发人员使用 Next.js 开发的过程。例如,一些测试可以复现对 Next.js 应用程序的更改,以查看热模块替换是否正常工作。
这些集成测试主要基于 Selenium webdriver,它与 chromedriver 结合在一起测试无头 Chrome。但随着时间的推移,其他浏览器,尤其是 Internet Explorer 11 等旧版浏览器会出现一些问题。
因为官方使用了 Selenium,所以能够在多个浏览器上自动运行测试。
截至目前,官方正在 Chrome、Firefox、Safari 和 Internet Explorer 11 上运行这个测试套件。
**谷歌 Chrome 协作**
谷歌 Chrome 团队一直在通过提交 RFC 和 pull request 来改进 Next.js。
双方合作的目标是大规模性能提升,重点是包大小、启动和 hydrate 时间。
例如,这些更改将改善小型网站的体验,也可以改善 Hulu、Twitch 和 Deliveroo 等大型应用程序的体验。
** 模块 /Nomodule**
合作的第一项重点任务是将新版 JavaScript 代码发布到支持新版 JavaScript 的浏览器上。
例如,当前 Next.js 必须为 async/await 语法提供 polyfill,因为代码可能在不支持 async/await 的浏览器中执行。
![](https://s4.51cto.com/images/blog/202012/18/d37beb238f561a62b6a3025cd448a0d1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
Next.js Module/Nomodule 合作 RFC
为了在保持旧浏览器中正常运行应用的前提下向支持 JS 的浏览器发送新版 JavaScript 代码,Next.js 将使用 module/nomodule 模式。这个模式提供了一种可靠的机制,可以将新版 JavaScript 代码提供给现代浏览器,同时仍允许旧版浏览器回退到 polyfilled ES5。
此处 有 Next.js 中的 module/nomodule 的 RFC: https://github.com/zeit/next.js/issues/7563
** 改进包拆分**
Next.js 中当前的包拆分策略使用基于比率的启发式算法,用于在单个“公共”块中包含模块。由于只有一个包的时候粒度非常小,因此会下载不必要的代码(因为公共块可能包含特定路由实际上不需要的代码),或者代码复制到了多个页面包中。
![](https://s4.51cto.com/images/blog/202012/18/1f78d1bc2b3fa65c19abd3a2155d7746.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
Next.js Chunking Collaboration RFC
此处有改进包拆分的 RFC: https://github.com/zeit/next.js/issues/7631
** 其他改进**
Chrome 团队还在对 Next.js 进行许多其他优化和更改。这些 RFC 将很快分享给开发者。
这些 RFC 和 pull request 标记为“协作”,以便在 Next.js 问题跟踪器中轻松找到它们: https://github.com/zeit/next.js/labels/Type%3A%20Collaboration
### 社区
Next.js 社区在继续成长。此版本有超过 65 位 pull request 作者提供核心改进或示例。
现在官方提供了 200 多个关于如何将 Next.js 与不同库和技术集成的示例,包括大多数 css-in-js 和数据获取库。
* 已经有超过 720 名贡献者提交了至少 1 次贡献。
* 在 GitHub 上,该项目已经得到了 38,600 星。
* 自第一个版本发布以来已提交了超过 3,400 个 pull request,自上次主要版本发布以来有超过 800 个。
* 自上次主要版本发布以来,Spectrum.chat/next-js 上的 Next.js 社区注册成员多了一倍,现在超过 8,600 人。
感谢社区以及帮助开发此版本的所有外部反馈和贡献。
英文原文: https://nextjs.org/blog/next-9#built-in-zero-config-typescript-support
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!