highlight参数无效
在配置了highlight参数后,发现所有的页面代码都无法highlight。
content: {
highlight: {
theme: 'dracula',
},
},
但是当删除了某一个.md
文件后,页面又可以highlight了。
因此判断,错误出现在这个特定的.md
文件;由于nuxt是Server端渲染,因此可能出现一篇文章错误导致所有大文章都无法highlight的情况。
观察报错,发现了关键信息<source.css.scss>
。
[nuxt] [request error] No grammar provided for <source.css.scss>
at Registry.e._collectDependenciesForDep (./node_modules/shiki-es/dist/shiki.mjs:12:24999)
at Registry.<anonymous> (./node_modules/shiki-es/dist/shiki.mjs:12:25495)
at ./node_modules/shiki-es/dist/shiki.mjs:12:23016
at Object.next (./node_modules/shiki-es/dist/shiki.mjs:12:23125)
at s (./node_modules/shiki-es/dist/shiki.mjs:12:21828)
而scss语言只出现在了这个特定的.md
文件里。这很可以就是错误处。
```scss
xxxxx
```
当删除了scss
符号后,文章可以正常解析。
那么错误原因是什么呢?
Content
使用了shiki,并且在内置的可解析的语言列表中包含了scss
语言。
Content使用的是0.10.0版本的shiki,而这个bug在0.10.1中得到了修复。
临时的解决方法为,配置preload
属性:
content: {
highlight: {
theme: 'dracula',
preload: ['scss']
},
},
无法解析某个md文件
报错信息如下:
500
Cannot use 'in' operator to search for 'path' in undefined
at Object.resolve (./node_modules/vue-router/dist/vue-router.cjs.js:2875:20)
at ReactiveEffect.eval [as fn] (./node_modules/vue-router/dist/vue-router.cjs.js:2052:45)
at ReactiveEffect.run (./node_modules/@vue/reactivity/dist/reactivity.cjs.js:168:25)
at ComputedRefImpl.get value [as value] (./node_modules/@vue/reactivity/dist/reactivity.cjs.js:1136:39)
at ReactiveEffect.eval [as fn] (./node_modules/vue-router/dist/vue-router.cjs.js:2054:35)
at ReactiveEffect.run (./node_modules/@vue/reactivity/dist/reactivity.cjs.js:168:25)
at ComputedRefImpl.get value [as value] (./node_modules/@vue/reactivity/dist/reactivity.cjs.js:1136:39)
at ReactiveEffect.eval [as fn] (./node_modules/vue-router/dist/vue-router.cjs.js:2079:64)
at ReactiveEffect.run (./node_modules/@vue/reactivity/dist/reactivity.cjs.js:168:25)
at ComputedRefImpl.get value [as value] (./node_modules/@vue/reactivity/dist/reactivity.cjs.js:1136:39)
乍一看,好像是<NuxtLink>
没有得到正确的参数,从而产生了报错。
但是解析其他的.md
文件,又可以正常解析,因此问题大概率出现在这个.md
文件中。
通过一行一行的删除这个.md
文件的内容,最终找到了错误源头:
这一部分难度不大,只需要通过<router-link>标签来配置路由,剩下的只是一些小细节,例如:
这一段普通文本行中出现了<router-link>
,而在Content
中,将其当做了原始组件。
这一点在Content的文档里得到了说明:
https://content.nuxtjs.org/guide/writing/mdc
对于普通文本行中有歧义的描述代码的部分,应当使用``符(代码符)来标识。
总结
个人认为,解决bug最重要的步骤是定位bug。
只要定位到bug并能稳定复现后,便可以顺着正确的方向一路解决下去。
因此,掌握一定的的Debug技巧便显得十分重要了。