问题描述 最近使用 Nuxt.js 的 Content 模块 时,发现其支持项目中写好的 Vue 组件,相关文档可以参考 这里 ~/components/XXX/VideoArea.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <script setup lang="ts"> import ArtPlayer from "artplayer" const art_ref = ref<HTMLInputElement | null>(null) const art_instance = ref<Artplayer | null>(null); const props = defineProps<{ url: string }>() onMounted(() => {     if (!art_ref.value) return     // 文档参考: https://artplayer.org/document/start/option.html     art_instance.value = new ArtPlayer({         // 指定播放器的容器元素         container: art_ref.value,         // 设置视频的 URL         url: props.url,         // 启用自动迷你模式         autoMini: true,         // 启用自动调整大小         autoSize: true,         // 启用全屏模式         fullscreen: true,         // 使用服务器端渲染         // useSSR: true,         // 启用快进功能         fastForward: true,         // 锁定播放器界面         lock: true     }) }) </script> <template>     <div ref="art_ref" class="h-96 mr-auto">         <slot></slot>     </div> </template> 
对应 Content
1 2 3 4 5 6 7 --- title: '标题' description: '简述' --- ::xxx-video-area{url="视频链接"} 视频描述 :: 
发现启动后报错 If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.,后来发现可能是没有设定全局组件,文档中有提到:
Components that are used in Markdown has to be marked as global in your Nuxt app if you don’t use the components/content/ directory, visit Nuxt 3 docs to learn more about it.
 
对比一下,我的组件在~/components/XXX/下,而不是在~/components/content/下,因此无法访问到该组件。
解决方案 方案一:将组件移动到~/components/content/目录下 假设你的组件仅用于内容页面,可以将其移动到~/components/content/目录下,这样 Nuxt Content 模块会自动识别并加载这些组件。
方案二:将组件名称改为VideoArea.global.vue 参考官方文档 ,我们修改文件后缀名也可以达到全局化的效果
方案三:将所有组件默认设为全局 在nuxt.config.ts中,我们需要增加组件选项,设为全局即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 export  default  defineNuxtConfig ({  compatibilityDate : '2024-04-03' ,   devtools : { enabled : true  },   css : ['~/assets/css/main.css' ],   postcss : {     plugins : {       tailwindcss : {},       autoprefixer : {},     },   },   modules : ['@nuxt/content' ],         components : {     global : true ,     dirs : ['~/components' ]   }, })