Next.js 无需任何配置即可支持现代浏览器。
- Chrome 64+ - Chrome 浏览器 64+
- Edge 79+ - 边缘 79+
- Firefox 67+
- Opera 51+
- Safari 12+
Browserslist
如果你想要针对特定的浏览器或特性,Next.js 支持在 package.json 文件中使用 Browserslist (opens in a new tab) 配置。Next.js 默认使用以下 Browserslist 配置:
{
"browserslist": [
"chrome 64",
"edge 79",
"firefox 67",
"opera 51",
"safari 12"
]
}
Polyfills
我们注入了 常用的 polyfills (opens in a new tab),包括:
- fetch() (opens in a new tab) — 代替:
whatwg-fetch
和unfetch
. - URL (opens in a new tab) — 代替: the
url
package (Node.js API) (opens in a new tab). - Object.assign() (opens in a new tab) — 替代 :
object-assign
,object.assign
和core-js/object/assign
。
如果你的任何依赖项包含这些 polyfill,它们会在生产版本中自动排除,以避免重复。
此外,为了减小包的大小,Next.js 只会为需要它们的浏览器加载这些 polyfill。全球大部分的网络流量都不会下载这些 polyfill。
自定义 Polyfill
如果你自己的代码或任何外部 npm 依赖项需要目标浏览器不支持的功能(如 IE 11),你就需要自己添加 polyfill。
在这种情况下,你应该在自定义<App>
组件或单独的组件中,添加特定 polyfill 的顶层导入语句。
JavaScript 语言特性
Next.js 允许你开箱即用最新的 JavaScript 特性。除了 ES6 特性 (opens in a new tab) 之外,Next.js 还支持:
- Async/await (opens in a new tab) (ES2017)
- Object Rest/Spread Properties (opens in a new tab) (ES2018)
- Dynamic
import()
(opens in a new tab) (ES2020) - Optional Chaining (opens in a new tab) (ES2020)
- Nullish Coalescing (opens in a new tab) (ES2020)
- Class Fields (opens in a new tab) 和 Static Properties (opens in a new tab) (part of stage 3 proposal)
- 等
服务器端 Polyfills
除了在客户端的 fetch()
之外,Next.js 还在 Node.js 环境中(尚未可用) polyfill 了 fetch()
。它使用 undici
,与 Node.js 本身使用的实现相同。你可以在服务器代码中(如 getStaticProps
/getServerSideProps
)使用 fetch()
,而无需使用像 isomorphic-unfetch
和 node-fetch
这样的 polyfill。
TypeScript 特性
Next.js 内置了 TypeScript 支持。 了解更多。
自定义 Babel 配置(高级)
你可以自定义 babel 配置。 了解更多。