扩展层
Nuxt 提供了一个强大的系统,允许你扩展默认文件、配置等。
Nuxt 的核心特性之一是图层(layers)和扩展支持。你可以扩展一个默认的 Nuxt 应用以重用组件、工具函数和配置。图层的结构几乎与标准的 Nuxt 应用相同,这使得它们易于编写和维护。
用例
- 使用
nuxt.config
和app.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 来扩展远程图层。查看文档以获取更多信息和所有可用选项。
图层优先级
在使用多个图层时,理解它们如何相互覆盖非常重要:
extends
中的图层 - 越早列出的条目优先级越高(第一个覆盖第二个)- 来自
~~/layers
目录的 自动扫描的本地图层 按字母顺序(Z 覆盖 A) - 你的项目 在堆栈中具有最高优先级 — 它将始终覆盖其他图层
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
})
这意味着,如果多个图层定义了相同的组件、配置或文件,则将使用优先级更高的那个。