我在我的博客中使用Next.js,我将我的博客存储在markdown文件中,并将这些文件转换为字符串,然后使用Greymatter转换为HTML。我的代码块分解成<pre><code class="language-whatever">
,无论我做什么,我都不能让语法突出显示发生。
我试过通过npm添加highlight.js,从highlight.js和prism下载文件,使用它们的cdn,但没有什么真正有效。
有没有人有使用Next.js在markdown博客上设置语法突出显示的经验?一个例子或任何建议将是伟大的!谢谢
5条答案
按热度按时间mm9b1k5b1#
我想出来了!我将react-syntax-highlighter与react-markdown结合使用。我从this blog得到了一些代码片段,其中包含如何解析代码片段并通过语法高亮器传递。
Here's my repo,如果你想看看我的解决方案。
我使用marked将我的markdown转换为HTML字符串,这阻止了高亮显示的发生。一旦我将我的markdown内容从标记的依赖项中取出,并将gray-matter.content传递给我的ReactMarkdown,它就完美地工作了。
......好吧,也许不是很完美......
当我尝试使用颜色主题时,发生了一些奇怪的事情。我最终把我想要的主题从节点模块中拉出来,把它放在我的根目录中,从那里调用它,它非常好。有一点hacky,但它的工作!
yquaqz182#
下面是我如何在Next.js https://thetombomb.com/posts/adding-code-snippets-to-static-markdown-in-Next%20js中使用语法突出显示
我最初使用的是greymatter,因为我是在Next.js starter应用项目之后构建的。我不得不转移到使用react-markdown和react-syntax-highlighter来让一切正常工作。
u1ehiz5o3#
正如您在回答中提到的,您正在使用react-markdown,您不需要react-syntax-highlighter。
它是一个基于prismjs构建的包,那么为什么不直接使用prismjs呢?
这个博客syntax-highlighting-next-js包含演练。
如果不考虑特殊的用例(如您的用例),使用父包总是比使用 Package 器包更好。
tp5buhyn4#
定义自定义渲染器:
然后返回该组件
huwehgph5#
如果你正在使用Markdown,那么你可以转向MDX(Markdown扩展),这样你就可以启用插件,比如rehype-highlight插件,它与
highlight.js
相同。启用此功能后,您可以导入它并将其添加到MDX选项中,然后您需要做的就是选择highlight.js style并将其导入到页面中:
1.安装rehype-highlight:
npm install rehype-highlight
1.添加到您的mdx选项:
1.下载一个highlight.js style到
/styles/highlight-js/
并将其导入到您的页面:完整的说明可以在这里找到:https://gaudion.dev/blog/mdx-syntax-highlighting