2019 年 4 月 2 日,星期二
Next.js 8.0.4
发布者我们很高兴推出已可用于生产环境的 Next.js 8.0.4
与往常一样,我们力求确保所有这些优势都完全向后兼容。对于大多数 Next.js 应用程序,您只需运行
npm i next@latest react@latest react-dom@latest
构建性能
Next.js 构建现在更具确定性,这意味着如果代码没有更改,则每次构建输出都将保持相同的结果。
这允许构建过程完成更多可缓存的工作,从而在首次构建后更快地重建生产代码。
我们的测量表明,大量构建时间用于压缩 JavaScript,因为构建输出现在更具确定性,因此压缩文件已在缓存中的可能性更大。
用户部署到 Vercel将自动体验到这些缓存改进。
我们简化了服务器端 next/dynamic
清单,使其仅包含异步加载的模块。这种简化的清单计算速度更快,并减少了 JavaScript 代码量。
CircleCI 用户应该会注意到更快的构建时间。以前,由于 CircleCI 环境未准确反映可用 CPU 的数量,因此工作进程被过度调度。Next.js 现在可以检测 CircleCI,并根据可用资源设置适当数量的 CPU。
更小的运行时占用空间
与之前的版本相比,Next.js 现在生成的客户端 JavaScript 代码减少了 5.58KB,HTTP 有效负载也更小。
withRouter
不再依赖 hoist-non-react-statics
,从而将捆绑包大小减少了 3KB。withRouter
仍然会提升 getInitialProps
,但不会提升其他静态属性。
next/babel
预设已得到优化,可以生成更精简和更快的 JavaScript 代码。
X-Powered-By
标头已被删除,从而减小了 HTTP 有效负载大小。我们调查了社区,发现该标头通常在生产环境中被禁用,因此我们决定将其删除。这也意味着,如果您的项目中启用了 poweredByHeader
选项,则可以从 next.config.js
中删除该选项。
我们在 Next.js 依赖树和整个代码库中进行了许多优化,这样做使每个 Serverless 函数缩小了 44KB(gzip 压缩后缩小了 5.44KB)。
Serverless 函数大小直接影响 Serverless 启动性能,更小的函数意味着更快的启动速度。
8.0 | 8.0.4 | 增量 | |
---|---|---|---|
Serverless 页面大小 | 259 KB | 215 KB | 17% 更小 |
Serverless 页面大小(gzip 压缩后) | 62.3 KB | 56.8 KB | 9% 更小 |
在 Next.js 8 发布后,我们收到少量用户的报告,称他们在 Next.js 外部导入 React 组件时遇到问题,例如在他们的测试套件中。这是由于对 next
的导入被重写为 Next.js 代码库中的正确文件而引起的,但是,此优化已应用于 next/babel
预设的所有用户。该优化已移至 Next.js 构建过程本身,因此它不会再与用户的 babel 设置冲突。
默认 Viewport Meta 标签
Next.js 的目标之一是为编写 Web 应用程序提供尽可能好的默认设置。为了减少在 Next.js 中实现 CSS 媒体查询时必须进行的设置量。
默认情况下,浏览器不会按照您期望的方式处理 CSS @media
查询和缩放,这可能会在编写 CSS @media
查询时导致意外的不一致。
在几乎所有情况下,Next.js 用户都会向其应用程序添加 viewport
meta 标签来解决这些不一致之处。
从 8.0.4 版本开始,在大多数情况下不再需要此 viewport
标签。如果应用程序未设置 viewport
,则将应用默认 viewport
<meta
name="viewport"
content="width=device-width,minimum-scale=1,initial-scale=1"
/>
viewport 标签仍然可以使用 next/head
覆盖
import Head from 'next/head';
function HomePage() {
return (
<>
<Head>
<meta
name="viewport"
content="width=device-width,minimum-scale=0.5,initial-scale=1"
/>
</Head>
</>
);
}
export default HomePage;
感谢Jason Miller在合作和实施此更改方面做出的贡献。
新的 @next/mdx
插件
MDX 使您可以在 Markdown 文档中编写 JSX。您可以使用常规 markdown 语法来编写内容,并导入 React 组件以使用交互式和动态内容增强文档。
为 Next.js 提供 MDX 支持的插件 @zeit/next-mdx
已移至 Next.js GitHub 仓库,现在以 @next/mdx
的形式提供。
安装
npm i @next/mdx @mdx-js/loader
要使其在您的 Next.js 应用程序中可用,请创建一个 next.config.js
文件并包含
const withMDX = require('@next/mdx')();
module.exports = withMDX();
随着时间的推移,更多的 Next.js 插件将移至 Next.js 仓库,以便它们与 Next.js 核心一起发布,并由 Next.js 测试套件进行测试。这样,我们可以确保热模块替换、生产构建和其他功能与插件良好地协同工作。
学习指南改进
Next.js Learn 是一个循序渐进的学习 Next.js 的指南,包含测验和示例。
该网站最近已使用 MDX 重建,这使得贡献比以往任何时候都更容易。我们欢迎任何人为 learn 网站做出贡献!
该网站也已升级以使用 Next.js serverless target,该功能在 Next.js 8 中引入,确保网站可以扩展并为世界各地的用户提供快速访问体验。
我们收到了社区关于内容改进的大量反馈,并且在过去几周内一直在根据这些反馈采取行动。Next.js Learn 现在在每个部分都更新了示例和更多细节,以使说明更易于理解!

贡献
我们非常高兴看到 Next.js 的采用持续增长。
- 我们已经有超过 660 位贡献者。
- 在 GitHub 上,该项目已被 star 超过 36,150 次。
- 自首次发布以来,已提交超过 2,950 个 pull request。
我们要感谢每一位为此次 Next.js 版本发布做出贡献的人。无论是为核心代码做出贡献,还是扩展和改进我们不断增长的 示例目录,我们都感谢所有的贡献。
如果您希望开始为 Next.js 做出贡献,那么带有 good first issue 或 help wanted 标签的问题是一个不错的起点。
社区
Next.js 社区已发展到超过 6,000 名成员。
GitHub discussions 是一个您可以讨论 Next.js、获取解决问题建议以及用您的 Next.js 知识帮助其他社区成员的地方。