功能

启用或禁用可选的 Nuxt 功能以解锁新可能性。

Nuxt 的某些功能以选择性启用的方式提供,或可根据你的需要被禁用。

features

devLogs

在开发时将服务器日志流式传输到客户端。这些日志可以在 dev:ssr-logs 钩子中处理。

默认情况下,在开发模式启用(当测试模式未激活时)。

如果设置为 silent,日志将不会打印到浏览器控制台。

nuxt.config.ts
export default defineNuxtConfig({
  features: {
    devLogs: true,
  },
})

inlineStyles

在渲染 HTML 时内联样式。目前仅在使用 Vite 时可用。

你也可以传入一个函数,该函数接收 Vue 组件的路径并返回一个布尔值来指示是否为该组件内联样式。

默认值为 (id) => id.includes('.vue')

nuxt.config.ts
export default defineNuxtConfig({
  features: {
    inlineStyles: false, // 或用于确定是否内联的函数
  },
})

noScripts

关闭 Nuxt 脚本和 JavaScript 资源提示的渲染,使页面以纯 HTML 和 CSS 的形式交付。

可用值:

  • false(默认值):脚本正常渲染。
  • 'production'(或 true,会被规范化为 'production'):仅在生产构建中省略脚本,因此热模块替换和其他开发功能仍可在 nuxt dev 中正常工作。
  • 'all':在开发和生产环境中均省略脚本。

不含脚本的页面会通过整页加载进行导航。为了保持导航速度,Nuxt 会在这些页面上输出一个 推测规则 标签,以便支持该功能的浏览器在用户点击链接前预获取并预渲染目标页面。该标签是声明式 JSON,不会执行 JavaScript。这些规则的作用范围限定为页面路由(这些路由可以安全地使用 GET 请求),而不是所有同源链接,因此指向 /logout 等服务器路由的链接永远不会被推测性获取。全匹配页面(例如 pages/[...slug].vue)会匹配所有路径,从而将作用范围扩大回所有同源链接。

客户端向受 noScripts 路由规则覆盖的路由进行导航时,会改为触发完整的文档加载,因此该路由确实会在不含脚本的情况下提供服务,而不是由客户端路由器渲染。在构建时已知其路由受此类规则覆盖的页面,也会被完全排除在客户端 bundle 之外。

包含脚本的页面会输出自己的推测规则标签,其作用范围限定为 noScripts 路由模式,因此浏览器可以在向这些页面进行整页导航前预获取并预渲染目标页面。启用视图过渡时,这些页面还会选择加入声明式跨文档视图过渡,以便为导航添加动画效果。

nuxt.config.ts
export default defineNuxtConfig({
  features: {
    noScripts: 'production', // 或 'all' | false
  },
})

你也可以通过 noScripts 路由规则按路由禁用脚本,该设置在所有模式下均适用:

nuxt.config.ts
export default defineNuxtConfig({
  routeRules: {
    '/blog/**': { noScripts: true },
  },
})

noScripts 应用于渲染页面时,以下内容将从 HTML 中省略:

  • Nuxt 入口 <script> 标签
  • 入口代码块的导入映射
  • 内联的 payload <script>(启用 payload 提取时,还包括 payload 预加载链接)
  • JavaScript 资源提示(JavaScript 代码块的 preloadprefetch 链接)

CSS 不受影响:样式表链接和内联样式仍会渲染,因此页面外观保持不变。页面只是不再进行 hydration,这意味着其中的任何内容都无法交互。

需要注意以下几点交互影响:

  • 配置了 noScripts 路由规则的路由始终使用缓冲式(非流式)渲染器进行渲染。
  • 服务器组件如果仅渲染静态 HTML,则可以正常工作;但使用 nuxt-client 进行 hydration 的组件和交互式岛槽位依赖内联脚本来重新定位 teleported 内容,因此在 noScripts 路由上不会变得可交互。出于同样的原因,当全局设置 features.noScripts 且启用了组件岛时,Nuxt 也会回退到缓冲式渲染。
请参阅大部分为静态站点的配方,了解如何将 noScripts 与预渲染、岛和延迟 hydration 结合使用。 ::这里只精品

future

还有一个 future 命名空间,用于提前选择启用将在未来(可能是重大)版本中成为默认值的新功能。

compatibilityVersion

这使得可以提前访问 Nuxt 的功能或标志。将 compatibilityVersion 设置为 5 会在您的 Nuxt 配置中更改默认值,以选择 Nuxt v5 的行为,包括启用 Vite 环境 API
export default defineNuxtConfig({
  future: {
    compatibilityVersion: 5,
  },
})
了解更多关于测试 Nuxt 5 的信息。

multiApp

此项启用对实验性多应用支持的早期访问。你可以关注 tracker issue #21635 以查看 Nuxt 多应用支持的进展。

nuxt.config.ts
export default defineNuxtConfig({
  future: {
    multiApp: true,
  },
})

typescriptBundlerResolution

此项为 TypeScript 启用“Bundler”模块解析模式,这是针对像 Nuxt 和 Vite 这样的框架推荐的设置。

在使用带有 exports 的现代库时,它可以改进类型支持。

参见 原始的 TypeScript pull request

你可以将其设置为 false 以使用旧的“Node”模式,这是 TypeScript 的默认设置。

nuxt.config.ts
export default defineNuxtConfig({
  future: {
    typescriptBundlerResolution: false,
  },
})