如何在Svelte组件中运行Prismjs?

我只是想在我的Svelte项目中实现Prismjs。

我正在<head>中加载CSS,并在Svelte组件中导入JS。

我遇到了此处描述的类似问题:https://medium.com/get-it-working/get-prismjs-working-in-react-a6d989e59290

基本上,似乎我需要在渲染组件后重新运行脚本。我试图通过在Prism.highlightAll()生命周期内运行onmount来实现与React中所述相同的方法。

我希望这种方法行得通,但是我什么也没做。我仍然必须刷新页面才能看到样式生效。我在这里想念什么?

yaoyang111 回答:如何在Svelte组件中运行Prismjs?

tldr;这不是Svelte的问题。我的Sanity blocks-to-html实用程序的序列化程序存在问题。

嗨,@ RichHarris!整理好回购的仓库后,我发现棱镜按预期工作了。这样我就可以缩小问题范围。

最初我应该提到,我正在使用Sapper并从Sanity中提取内容。我对Sanity的block-content-to-html实用程序的序列化程序进行了修改,将我的可移植文本转换为标记。 <pre>标签从Sanity那里获得data-language='HTML',Prism CSS期望class="language-HTML。我将序列化器修改为:

code: ({node}) => 
    h(
        "pre",{
            "data-language": node.language,"class": "language-" + node.language
        },h("code",{},node.code)
    )

刷新后正在工作。将添加class属性,并应用CSS。我只是翻阅代码,因为我不太了解blocksToHtml的工作原理,但是将object属性更改为className时,一切都按预期进行了:

code: ({node}) => 
    h(
        "pre",className: "language-" + node.language
        },node.code)
    )

感谢您的关注,Rich!我真的很喜欢斯维尔特!

本文链接:https://www.f2er.com/3147492.html

大家都在问