Nuxt 提供了一个强大的系统,允许您扩展默认文件、配置等等。

Nuxt 的核心功能之一是层和扩展支持。您可以扩展默认的 Nuxt 应用程序以重用组件、工具和配置。层的结构几乎与标准 Nuxt 应用程序相同,这使得它们易于编写和维护。

用例

  • 使用 nuxt.configapp.config 在项目之间共享可重用的配置预设
  • 使用 app/components/ 目录创建组件库
  • 使用 app/composables/app/utils/ 目录创建实用工具和组合式库
  • 创建 Nuxt 模块预设
  • 在项目之间共享标准设置
  • 创建 Nuxt 主题
  • 通过实现模块化架构并在大型项目中支持领域驱动设计 (DDD) 模式来增强代码组织。

使用

默认情况下,项目中 ~~/layers 目录中的任何层都将自动注册为项目的层。

层自动注册功能在 Nuxt v3.12.0 中引入。

此外,每个层的 srcDir 将自动创建命名层别名。例如,您将能够通过 #layers/test 访问 ~~/layers/test 层。

命名层别名功能在 Nuxt v3.16.0 中引入。

此外,您可以通过在 nuxt.config 文件中添加 extends 属性来扩展层。

nuxt.config.ts
export default defineNuxtConfig({
  extends: [
    // Extend from a local layer
    '../base',
    // Extend from an installed npm package
    '@my-themes/awesome',
    // Extend from a git repository
    'github:my-themes/awesome#v1',
  ],
})

如果您要从私有 GitHub 仓库扩展,您还可以传递身份验证令牌

nuxt.config.ts
export default defineNuxtConfig({
  extends: [
    // per layer configuration
    ['github:my-themes/private-awesome', { auth: process.env.GITHUB_TOKEN }],
  ],
})
您可以通过在层源旁边的选项中指定别名来覆盖层的别名。
nuxt.config.ts
export default defineNuxtConfig({
  extends: [
    [
      'github:my-themes/awesome',
      {
        meta: {
          name: 'my-awesome-theme',
        },
      },
    ],
  ],
})

Nuxt 使用unjs/c12等等unjs/giget用于扩展远程层。请查阅文档以获取更多信息和所有可用选项。

层优先级

当使用多个层时,了解它们如何相互覆盖非常重要

  1. extends 中的层 - 靠前的条目具有更高的优先级(第一个覆盖第二个)
  2. ~~/layers 目录中自动扫描的本地层 按字母顺序排列(Z 覆盖 A)
  3. 您的项目 在堆栈中具有最高优先级 - 它将始终覆盖其他层
nuxt.config.ts
export default defineNuxtConfig({
  extends: [
    // Highest priority (among extends)
    '../base',
    // Medium priority
    '@my-themes/awesome',
    // Lower priority
    'github:my-themes/awesome#v1',
  ],
  // Your project has the highest priority
})

这意味着如果多个层定义了相同的组件、配置或文件,则将使用优先级较高的那个。

层作者指南中阅读更多关于层的信息。

示例

Content Wind

一个轻量级的 Nuxt 主题,用于构建 Markdown 驱动的网站。由 Nuxt Content、TailwindCSS 和 Iconify 提供支持。