实验特性
Nuxt 实验特性可以在 Nuxt 配置文件中启用。
在内部,Nuxt 使用 @nuxt/schema
来定义这些实验特性。您可以参考 API 文档 或 源代码 以获取更多信息。
asyncContext
启用原生异步上下文,以便在 Nuxt 和 Nitro 中嵌套的组合式函数可以使用。这为在异步组合式函数内部使用组合式函数打开了可能性,并减少了出现 Nuxt 实例不可用
错误的几率。
export default defineNuxtConfig({
experimental: {
asyncContext: true
}
})
asyncEntry
启用为 Vue 捆绑包生成异步入口点,有助于模块联合支持。
export default defineNuxtConfig({
experimental: {
asyncEntry: true
}
})
externalVue
在构建时外部化 vue
、@vue/*
和 vue-router
。
默认启用。
export default defineNuxtConfig({
experimental: {
externalVue: true
}
})
treeshakeClientOnly
从服务器捆绑包中剔除仅客户端组件的内容。
默认启用。
export default defineNuxtConfig({
experimental: {
treeshakeClientOnly: true
}
})
emitRouteChunkError
当加载 vite/webpack 块时发生错误时,发出 app:chunkError
钩子。默认行为是在导航到新路由时,如果块加载失败,则重新加载新路由。
如果将其设置为 'automatic-immediate'
,Nuxt 将立即重新加载当前路由,而不是等待导航。这对于不是由导航触发的块错误很有用,例如,当您的 Nuxt 应用程序无法加载 延迟组件 时。这种行为的潜在缺点是出现不需要的重新加载,例如,当您的应用程序不需要导致错误的块时。
您可以通过将其设置为 false
来禁用自动处理,或者通过将其设置为 manual
来手动处理块错误。
export default defineNuxtConfig({
experimental: {
emitRouteChunkError: 'automatic' // or 'automatic-immediate', 'manual' or false
}
})
restoreState
允许在块错误或手动调用 reloadNuxtApp()
后重新加载页面时,从 sessionStorage
恢复 Nuxt 应用程序状态。
为了避免水合错误,它将在 Vue 应用程序挂载后才应用,这意味着初始加载时可能会出现闪烁。
useState
提供显式键,因为自动生成的键在构建之间可能不匹配。export default defineNuxtConfig({
experimental: {
restoreState: true
}
})
inlineRouteRules
使用 defineRouteRules
在页面级别定义路由规则。
export default defineNuxtConfig({
experimental: {
inlineRouteRules: true
}
})
将根据页面的 path
创建匹配的路由规则。
renderJsonPayloads
允许渲染 JSON 有效负载,并支持恢复复杂类型。
默认启用。
export default defineNuxtConfig({
experimental: {
renderJsonPayloads: true
}
})
noVueServer
在 Nitro 中禁用 Vue 服务器渲染端点。
export default defineNuxtConfig({
experimental: {
noVueServer: true
}
})
payloadExtraction
启用提取使用 nuxt generate
生成的页面的有效负载。
export default defineNuxtConfig({
experimental: {
payloadExtraction: true
}
})
clientFallback
启用实验性 <NuxtClientFallback>
组件,以便在 SSR 发生错误时在客户端渲染内容。
export default defineNuxtConfig({
experimental: {
clientFallback: true
}
})
crossOriginPrefetch
使用推测规则 API 启用跨源预取。
export default defineNuxtConfig({
experimental: {
crossOriginPrefetch: true
}
})
viewTransition
启用 View Transition API 与客户端路由器集成。
export default defineNuxtConfig({
experimental: {
viewTransition: true
}
})
writeEarlyHints
在使用节点服务器时启用编写早期提示。
export default defineNuxtConfig({
experimental: {
writeEarlyHints: true
}
})
componentIslands
启用使用 <NuxtIsland>
和 .island.vue
文件的实验性组件岛支持。
export default defineNuxtConfig({
experimental: {
componentIslands: true // false or 'local+remote'
}
})
configSchema
启用配置模式支持。
默认启用。
export default defineNuxtConfig({
experimental: {
configSchema: true
}
})
polyfillVueUseHead
为依赖旧版 @vueuse/head
API 的模块、插件或用户代码添加兼容性层。
export default defineNuxtConfig({
experimental: {
polyfillVueUseHead: false
}
})
respectNoSSRHeader
通过设置 x-nuxt-no-ssr
标头允许禁用 Nuxt SSR 响应。
export default defineNuxtConfig({
experimental: {
respectNoSSRHeader: false
}
})
localLayerAliases
解析位于层内的 ~
、~~
、@
和 @@
别名,并参考其层源和根目录。
默认启用。
export default defineNuxtConfig({
experimental: {
localLayerAliases: true
}
})
typedPages
使用 unplugin-vue-router
启用新的实验性类型化路由器。
export default defineNuxtConfig({
experimental: {
typedPages: true
}
})
开箱即用,这将启用 navigateTo
、<NuxtLink>
、router.push()
等的类型化用法。
您甚至可以通过使用 const route = useRoute('route-name')
在页面中获取类型化参数。
watcher
设置一个替代的观察程序,它将用作 Nuxt 的观察服务。
Nuxt 默认使用 chokidar-granular
,它将忽略从观察中排除的顶级目录(如 node_modules
和 .git
)。
您可以将其设置为 parcel
以使用 @parcel/watcher
,这可能会提高大型项目或 Windows 平台上的性能。
您还可以将其设置为 chokidar
以监视源目录中的所有文件。
export default defineNuxtConfig({
experimental: {
watcher: 'chokidar-granular' // 'chokidar' or 'parcel' are also options
}
})
sharedPrerenderData
启用此功能会自动在预渲染的页面之间共享有效负载数据。当预渲染使用 useAsyncData
或 useFetch
并对不同页面获取相同数据的站点时,这可以带来显着的性能提升。
export default defineNuxtConfig({
experimental: {
sharedPrerenderData: true
}
})
启用此功能时,尤其重要的是要确保数据的任何唯一键始终可解析为相同的数据。例如,如果您正在使用 useAsyncData
获取与特定页面相关的数据,则应提供一个唯一匹配该数据的键。(useFetch
应该会自动为您执行此操作。)
// This would be unsafe in a dynamic page (e.g. `[slug].vue`) because the route slug makes a difference
// to the data fetched, but Nuxt can't know that because it's not reflected in the key.
const route = useRoute()
const { data } = await useAsyncData(async () => {
return await $fetch(`/api/my-page/${route.params.slug}`)
})
// Instead, you should use a key that uniquely identifies the data fetched.
const { data } = await useAsyncData(route.params.slug, async () => {
return await $fetch(`/api/my-page/${route.params.slug}`)
})
clientNodeCompat
使用此功能,Nuxt 将使用 unenv
在客户端构建中自动填充 Node.js 导入。
Buffer
等全局变量在浏览器中工作,您需要手动注入它们。import { Buffer } from 'node:buffer'
globalThis.Buffer = globalThis.Buffer || Buffer
scanPageMeta
此选项允许在构建时将 definePageMeta
中定义的一些路由元数据公开给模块(特别是 alias
、name
、path
、redirect
)。
此功能仅适用于静态值或字符串/数组,而不适用于变量或条件赋值。有关更多信息和上下文,请参阅原始问题。
也可以在 pages:extend
中所有路由注册后才扫描页面元数据。然后将调用另一个钩子 pages:resolved
。要启用此行为,请设置 scanPageMeta: 'after-resolve'
。
如果此功能在您的项目中引起问题,您可以禁用它。
export default defineNuxtConfig({
experimental: {
scanPageMeta: false
}
})
cookieStore
启用 CookieStore 支持,以侦听 Cookie 更新(如果浏览器支持)并刷新 useCookie
ref 值。
export default defineNuxtConfig({
experimental: {
cookieStore: true
}
})
buildCache
根据配置和源文件的哈希值缓存 Nuxt 构建工件。
export default defineNuxtConfig({
experimental: {
buildCache: true
}
})
启用后,以下文件的更改将触发完整重建
.nuxtrc
.npmrc
package.json
package-lock.json
yarn.lock
pnpm-lock.yaml
tsconfig.json
bun.lockb
此外,srcDir
中文件的任何更改都将触发 Vue 客户端/服务器捆绑包的重建。Nitro 将始终重建(尽管正在努力让 Nitro 公布其可缓存的工件及其哈希值)。
normalizeComponentNames
确保自动生成的 Vue 组件名称与您用于自动导入组件的完整组件名称匹配。
export default defineNuxtConfig({
experimental: {
normalizeComponentNames: true
}
})
默认情况下,如果您没有手动设置,Vue 将分配一个与组件文件名匹配的组件名称。
├─ components/
├─── SomeFolder/
├───── MyComponent.vue
在这种情况下,就 Vue 而言,组件名称将为 MyComponent
。如果您想使用 <KeepAlive>
或在 Vue DevTools 中识别它,则需要使用此组件。
但是,为了自动导入它,您需要使用 SomeFolderMyComponent
。
通过设置 experimental.normalizeComponentNames
,这两个值匹配,并且 Vue 将生成一个与 Nuxt 组件命名模式匹配的组件名称。