Release·  

Nuxt 3.11

Nuxt 3.11 已发布 - 具备更好的日志记录、预览模式、服务器页等等!

这可能是 Nuxt v4 之前的最后一个次要版本,因此我们将其打包了许多功能和改进,希望能够让您满意!✨

🪵 更好的日志记录

当您开发 Nuxt 应用,并在应用中使用 console.log 时,您可能已经注意到在刷新页面时(在服务器端渲染期间),这些日志不会显示在浏览器控制台中。这可能让调试应用变得很困难。但这已经成为过去!

现在,当您有与请求关联的服务器日志时,它们将被整合并传递给客户端,并在浏览器控制台中显示。异步上下文 用于跟踪和关联触发这些日志的请求。(#25936)。

例如,以下代码:

pages/index.vue
<script setup>
console.log('来自 index 页面的日志')

const { data } = await useAsyncData(() => {
  console.log('来自 useAsyncData 内的日志')
  return $fetch('/api/test')
})
</script>

现在,在您刷新页面时,它将在浏览器控制台中进行日志记录:

来自 index 页面的日志
[ssr] 来自 useAsyncData 内的日志 
    位于 pages/index.vue

👉 我们还计划未来支持将后续日志流式传输到 Nuxt DevTools。

我们还添加了 dev:ssr-logs 钩子(在 Nuxt 和 Nitro 中都有效),该钩子在服务器和客户端上调用,允许您自行处理日志。

如果您在使用中遇到任何问题,可以选择禁用它们,或阻止它们记录到浏览器控制台。

nuxt.config.ts
export default defineNuxtConfig({
  features: {
    devLogs: false
    // 或 'silent',以便您通过 `dev:ssr-logs` 钩子处理
  },
})

🎨 预览模式

新的 usePreviewMode 组合式函数旨在在 Nuxt 应用中轻松使用预览模式。

plugins/test.client.ts
const { enabled, state } = usePreviewMode()

在启用预览模式时,所有数据获取的组合式函数,如 useAsyncDatauseFetch,将重新运行,这意味着负载中的缓存数据将被绕过。

Read more in Docs > API > Composables > Use Preview Mode.

💰 更新缓存

现在,如果您没有禁用 Nuxt 的应用程序清单,我们将自动更新缓存中的负载,这意味着在部署后您不会遇到过时的数据 (#26068)。

👮‍♂️ 中间件 routeRules

现在可以在 Vue 应用程序部分(即非 Nitro 路由部分)为页面路径定义中间件了(#25841)。

nuxt.config.ts
export default defineNuxtConfig({
  routeRules: {
    '/admin/**': {
      // 或 appMiddleware: 'auth'
      appMiddleware: ['auth']
    },
    '/admin/login': {
      // 您可以“关闭”将为页面运行的中间件
      appMiddleware: {
        auth: false
      }
    },
  },
})
Read more in Docs > Guide > Concepts > Rendering#route Rules.

⌫ 新的数据获取实用程序 clear

现在,useAsyncDatauseFetch 提供了一个名为 clear 的实用程序。这是一个可用于将 data 设置为未定义,将 error 设置为 null,将 pending 设置为 false,将 status 设置为 idle,并标记任何当前挂起的请求为取消的函数 (#26259)

<script setup lang="ts">
const { data, clear } = await useFetch('/api/test')

const route = useRoute()
watch(() => route.path, (path) => {
  if (path === '/') clear()
})
</script>
Read more in Docs > Getting Started > Data Fetching.

🕳️ 新的 #teleports 目标

现在,在您的应用程序中的 <body> 标签内,Nuxt 将包含一个新的 <div id="teleports"></div> 元素。它支持服务器端传输,这意味着您可以在服务器上安全地执行以下操作:

app.vue
<template>
  <Teleport to="#teleports">
    <span>
      Something
    </span>
  </Teleport>
</template>

🚦 加载指示器和过渡控制

现在,可以为隐藏加载指示器和强制使用 finish() 方法设置自定义时机了 (#25932)。

如果启用了该功能,还有一个新的 page:view-transition:start 钩子可供使用以钩入视图过渡 API (#26045)。

🛍️ 仅服务器和客户端的页面

此版本引入了在 Nuxt 中支持仅服务器和客户端的页面!现在,您可以通过给页面添加 .server.vue.client.vue 后缀来自动处理它们。

客户端页面 将完全在客户端上呈现,并完全跳过服务器端渲染,就好像整个页面被包装在 <ClientOnly> 中一样。请谨慎使用,客户端的加载会导致糟糕的用户体验,因此确保您真的需要避免服务器端加载。您还可以考虑使用带有 fallback 插槽的 <ClientOnly> 来呈现骨架加载器 (#25037)。

⚗️ 服务器端页面 更加有用,因为它们使您能够在客户端导航中集成完全服务器端渲染的 HTML。甚至在链接到它们的链接在视口中时,它们也将被预取,因此您将获得即时加载 (#24954)。

🤠 服务器组件盛宴

当您使用服务器组件时,您现在可以在树的任何位置使用 nuxt-client 属性 (#25479)。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    componentIslands: {
      selectiveClient: 'deep'
    }
  },
})

您可以监听服务器组件的 @error 事件,以便在加载组件时出现任何问题时触发该事件 (#25798)。

最后,当您的项目或其任何层中有仅服务器组件或仅服务器页面时,servers-only 组件将被智能启用 (#26223)。

服务器组件仍然处于试验阶段,其 API 可能会发生变化,因此在依赖于实现细节之前,请小心。

🔥 性能改进

我们提供了许多性能改进,包括仅更新更改的虚拟模板 (#26250),使用“分层”的预渲染缓存 (#26104) 在预渲染时回退到文件系统而不是在内存中保存所有内容 - 还有其他许多改进示例。

📂 处理公共资源

我们已重新实现了 Vite 的公共资源处理,这意味着您 public/ 目录或层目录中的公共资源现在完全由 Nuxt 解析 (#26163),因此,如果您已添加 nitro.publicAssets 目录并具有自定义前缀,则现在将起作用。

📦 分块命名

我们已更改了默认的 JS 分块文件名模式 _nuxt/[name].[hash].js。现在,我们默认使用 _nuxt/[hash].js。这是为了避免进行组件或块名称触发 adblocker 导致误报的问题,这可能是一个非常难以调试的问题。 (#26203)

如果您希望恢复到以前的行为,您可以轻松进行配置:

nuxt.config.ts
export default defineNuxtConfig({
  vite: {
    $client: {
      build: {
        rollupOptions: {
          output: {
            chunkFileNames: '_nuxt/[name].[hash].js',
            entryFileNames: '_nuxt/[name].[hash].js'
          }
        }
      }
    }
  },
})

💪 类型修复

以前,如果 shamefully-hoist=false 的用户可能会遇到类型未解析或工作不正确的问题。您还可能遇到大量类型实例化的问题。

现在,我们尝试告诉 TypeScript 关于某些关键类型,以便即使嵌套深入,它们也可以解析(#26158)。

还有许多其他类型修复,包括一些与导入类型有关的修复(#26218#25965),以及模块类型的修复(#25548)。

✅ 升级

像往常一样,我们建议升级 Nuxt,只需运行:

nuxi upgrade --force

这将刷新您的 lockfile,并确保您从 Nuxt 依赖的其他依赖项中获取更新,特别是在 unjs 生态系统中。

👉 完整发布说明

阅读完整的 Nuxt v3.11.0 发布说明。

感谢您一直阅读到这里!我们希望您喜欢这个新版本。如果您有任何反馈或问题,请告诉我们。

快乐 Nuxt 之旅 ✨