Nuxt UI v3-alpha 已发布!

试用

Nuxt 内容

了解 @nuxt/content 模块如何与 Nuxt UI Pro 集成。

在构建登录页面、文档、博客甚至变更日志时,您需要管理内容。您可以通过为每个内容创建一个新页面、从 CMS 获取内容、存储在您自己的数据库中,等等,或者使用 @nuxt/content 模块来使用 Git 管理您的内容。

查看 Nuxt Studio,它是 @nuxt/content 的 Pro 版本,与 @nuxt/ui-pro 完全兼容。

安装

要开始使用,您可以按照 官方指南 操作,或者简单来说

pnpm i @nuxt/content

然后将模块添加到您的 nuxt.config.ts 文件中

nuxt.config.ts
export default defineNuxtConfig({
  extends: ['@nuxt/ui-pro'],
  modules: [
    '@nuxt/content',
    '@nuxt/ui'
  ]
})
您需要在 @nuxt/ui 之前注册 @nuxt/content,否则 Tailwind CSS 类将不会在您的 .md.yml 文件中解析。

现在 @nuxt/content 模块已安装,该层将自动配置语法 highlight 主题(使用 material-theme)并预加载一些语言,因此您无需这样做。

组件

您可能正在使用 @nuxt/content 来构建文档。为了帮助您完成此任务,我们构建了一些您可以在页面中使用的组件

  • 使用 ContentSearch 组件开箱即用地获得完整的文本搜索命令面板。无需再设置 Algolia DocSearch 了。
  • 使用 ContentToc 组件获得粘性目录。
  • 使用 ContentSurround 组件获得上一个/下一个导航。

排版

为了充分利用 @nuxt/content,我们使用 @tailwindcss/typography 插件来为您的内容设置样式。插件的默认设置已被覆盖,以使用来自您 应用程序配置primarygray 颜色,以及许多其他自定义选项,因此它与 Nuxt UI 的设计系统相匹配。

您可以将 <ContentSlot /><ContentRenderer /> 包裹在 PageBody 组件及其 prose 类中,以自动将 prose prose-primary dark:prose-invert max-w-none 类应用于您的内容,并使其看起来很棒。

为了帮助您编写内容,我们还添加了一些组件,以便使用 MDC 语法 在您的 .md 文件中使用它们,例如 CalloutCardCodeGroupTabs 等等。

实用程序

一些实用程序将被 **自动导入**,以在 @nuxt/content@nuxt/ui-pro 之间架起桥梁

mapContentNavigation

此实用程序将映射来自 fetchContentNavigation 的导航(通常在您的 app.vue 文件中获取),并将其递归地转换为组件(例如 NavigationTree)所期望的对象数组。

app.vue
<script setup lang="ts">
const { data: navigation } = await useAsyncData('navigation', () => fetchContentNavigation(), { default: () => [] })
</script>

<template>
  <UHeader>
    <template #panel>
      <UNavigationTree :links="mapContentNavigation(navigation)" />
    </template>
  </UHeader>
</template>

findPageHeadline

此实用程序将允许您根据页面的 _dirPageHeader 中绑定 headline

pages/[...slug].vue
<script setup lang="ts">
const route = useRoute()

const { data: page } = await useAsyncData(route.path, () => queryContent(route.path).findOne())

const headline = computed(() => findPageHeadline(page.value))
</script>

<template>
  <UPage>
    <UPageHeader v-bind="page" :headline="headline" />
  </UPage>
</template>

findPageBreadcrumb

此实用程序将根据导航递归地查找页面的面包屑,以便您可以在 PageHeader#headline 插槽中使用它。

app.vue
<script setup lang="ts">
const { data: navigation } = await useAsyncData('navigation', () => fetchContentNavigation())

provide('navigation', navigation)
</script>
pages/[...slug].vue
<script setup lang="ts">
import type { NavItem } from '@nuxt/content'

const navigation = inject<Ref<NavItem[]>>('navigation', ref([]))

const route = useRoute()

const { data: page } = await useAsyncData(route.path, () => queryContent(route.path).findOne())

const breadcrumb = computed(() => mapContentNavigation(findPageBreadcrumb(navigation.value, page.value)))
</script>

<template>
  <UPage>
    <UPageHeader v-bind="page">
      <template #headline>
        <UBreadcrumb :links="breadcrumb" />
      </template>
    </UPageHeader>
  </UPage>
</template>

您应该拥有使用 @nuxt/ui-pro 构建应用程序所需的所有信息,现在您可以探索所有可用的组件 🚀