【问题标题】:Google code-prettify Code highlighting not working for Polymer 3Google 代码美化代码突出显示不适用于 Polymer 3
【发布时间】:2023-03-17 21:45:01
【问题描述】:

如何在 Polymer 3 中使用 Google 代码美化?

语法高亮不起作用。 示例代码如下:

class MyView1 extends PolymerElement {
    static get template() {
        return html` 
      <style include="shared-styles">

 </style>

       <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>

                <pre class="prettyprint">
                    <code class="language-java">
                        public static void getValue(){

                            String name = "Vikram";
                        }




                    </code>
                </pre>

我在https://stackblitz.com/edit/polymer-element-example-d7n14q 添加了一个工作示例,代码也可以在其中编辑和运行。

【问题讨论】:

  • 这就是你的全部代码吗?看起来以 html` 开头的标记模板未关闭。
  • 不,这不是完整的代码......我只分享了一部分来说明问题。
  • 请提供解析为 JavaScript 的示例代码。通过一个部分示例,我们不能排除诸如语法错误之类的问题,它会阻止您的代码运行。
  • 请参阅sscce.org 了解我们需要帮助您的内容。
  • @MikeSamuel 我在stackblitz.com/edit/polymer-element-example-d7n14q添加了一个带有可编辑代码的运行示例,请帮助。

标签: javascript polymer-3.x google-code-prettify


【解决方案1】:

这个库以旧方式工作,不能很好地与 ShadowDom 配合使用。相反,您应该使用像 Highlight.js 这样的库,它可以作为模块使用。在聚合物 3 中,首先使用您的特定语言导入库

import hljs from 'highlight.js/lib/highlight';
import java from 'highlight.js/lib/languages/java';
hljs.registerLanguage('java', java);

然后用

突出显示您的元素
hljs.highlightBlock(this.$.code);

这里是一个工作示例:https://stackblitz.com/edit/polymer-element-example-tthbbn

【讨论】:

  • 非常感谢...这行得通。当代码示例工作时,当我尝试在我的实际代码中添加它时,我收到了这个错误: Uncaught (in promise) SyntaxError: The requested module '../node_modules/highlight.js/lib/highlight.js' does不提供名为“默认”的导出
  • 我需要使用 WebPack 来解决这个问题吗?
  • 这取决于您提供文件的方式...您可以使用 import { * as hljs} from 'highlight.js/lib/highlight'; 导入完整的命名空间;
【解决方案2】:

prettify 的 style.css 加了吗? https://cdn.rawgit.com/google/code-prettify/master/loader/prettify.css

我也会尝试将语言类放在 pre class 属性中。 (也使用 lang 代替语言)

如果它为它着色但不像您期望的那样,您可以尝试将 lang 作为 get 参数发送: https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?lang=java

【讨论】:

【解决方案3】:

看起来你有一个使用突出显示的解决方案,但要解释发生了什么:

run_prettify.js 在加载时美化 DOM 中的所有内容。

它不会递归到影子 DOM 中,也不会美化在 onload 之后添加的内容。

您可以通过显式调用 prettyPrintOne 或通过 Polymer.RenderStatus.afterNextRender 来解决这两个问题,尽管我不知道它如何与 lithtml 交互。

【讨论】:

  • prettyPrintOne is not defined 错误...如何在聚合物中定义?
  • 现在显示“PR.prettyPrintOne 不是函数...在 WebStorm IDE 中,PR.prettyPrintOne(escape(this.$.code2), 'java', false); PR 已解决并且点击它,IDE 会打开 prettify.js,它有一个函数 $prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {.... 但 IDE 仍然说 prettyPrintOne 未解决...
  • @Vikram Rawat,我认为您需要加载 prettify,而不是 run_prettify。
猜你喜欢
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2019-08-01
  • 2014-06-24
  • 2013-05-01
  • 1970-01-01
相关资源
最近更新 更多