前几天总结了一下分布式事务的文字,由于写了一些解决方案的执行原理,用到了状态图,开开心心的在 Typora 上面显示的好好的,结果已发布到 hexo 博客,直接显示不出来!!!🕳

# 解决过程

然后比较官方网站的流程图页面的的 html 源码,发现流程图是由一个个 svg 标签,而自己的页面却没有,而直接拷贝这段 svg 到 public 文件夹下面的文件的 html 文件里面是可以正常显示的,这说明官方文档说的要在显示流程图的 html 文件中添加 mermaid 的 css 依赖是有正常加载的,那么只有一个可能就是由 markdown 构建 html 文件的时候除了问题!

各种找啊找,终于找到一个目录在 node_modules\hexo-renderer-multi-markdown-it\lib\renderer\markdown-it-mermaid 里面的 55-69 行的中间打上一个 console.log

markdown-it-mermaid
md.renderer.rules.fence = (tokens, idx, options, env, self) => {
        const token = tokens[idx]
        const code = token.content.trim()
        console.log(token.info + '<------' + (token.info === 'mermaid'))
        if (token.info === 'mermaid') {
            var firstLine = code.split(/\n/)[0].trim()
            if (firstLine.match(/^graph (?:TB|BT|RL|LR|TD);?$/)) {
                firstLine = ' graph'
            } else {
                firstLine = ''
            }
            return mermaidChart(code, config, firstLine)
        }
        return defaultRenderer(tokens, idx, options, env, self)
    }

发现如果使用如下的代码块注释的时候,根本进入不到上面的调试代码

```mermaid
some content here
```

开始怀疑人生的时候,在 npx hexo server 打开的情况下,一个不小心将上面的的 mermaid 后面加上了一个 2,形如

```mermaid2
some content here
```

结果控制台输出了

mermaid2<------false

😓😓😓😓😓😓😓😓😓😓😓😓原来 mermaid 没有被识别为 token?? 但是如果改成 mermaid2 的话,Typora 又识别不了啊

# 最后解决方案

修改 node_modules\hexo-renderer-multi-markdown-it\lib\renderer\markdown-it-mermaid 文件的第 59 行的判断 if (token.info === 'Mermaid') { 这样在 Typora 编辑的时候也注意要第一个字母大写了😹, 勉强的解决方案

md.renderer.rules.fence = (tokens, idx, options, env, self) => {
        const token = tokens[idx]
        const code = token.content.trim()
        console.log(token.info + '<------' + (token.info === 'Mermaid'))
        if (token.info === 'Mermaid') {
            var firstLine = code.split(/\n/)[0].trim()
            if (firstLine.match(/^graph (?:TB|BT|RL|LR|TD);?$/)) {
                firstLine = ' graph'
            } else {
                firstLine = ''
            }
            return mermaidChart(code, config, firstLine)
        }
        return defaultRenderer(tokens, idx, options, env, self)
    }

有遇到这个问题并且完美解决的留言教我啊🙏🙏

更新于 阅读次数