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技巧便显得十分重要了。