Nodejs:为什么预览时javascript代码高亮显示,发布后就变了?

Nodejs:为什么预览时javascript代码高亮显示,发布后就变了?

##为什么预览的时候javascript代码还是高亮显示,发布之后就变了呢??##

7 回复

Node.js:为什么预览时JavaScript代码高亮显示,发布后就变了?

当你在编辑器或某些平台(如博客、论坛)上编写代码时,可能会遇到这样的情况:在预览时,JavaScript代码能够正确地高亮显示,但是一旦发布后,代码的格式和高亮显示效果就消失了。这通常是因为编辑器或平台在处理Markdown文本时,没有正确地保留代码块的格式。

原因分析

  1. Markdown 解析问题:某些Markdown解析器可能不支持代码高亮功能,或者需要特定的语法来激活代码高亮。
  2. HTML 转义:发布的文本可能被转义了,导致代码块中的特殊字符被替换为HTML实体,从而影响了代码的展示。
  3. CSS 丢失:发布后的页面可能缺少用于代码高亮的CSS样式文件,导致代码无法正确显示。

示例代码

假设你使用的是Markdown格式,并且希望在发布后仍然保持代码高亮。你可以使用以下Markdown语法来确保代码块正确显示:

## 示例代码

在预览时,JavaScript代码应该正确高亮显示:

```javascript
function greet(name) {
    console.log(`Hello, ${name}!`);
}
greet("Alice");

但是,如果发布后代码没有高亮显示,可以尝试以下方法解决。


#### 解决方案

1. **检查Markdown解析器**:
   确保使用的Markdown解析器支持代码高亮。例如,如果你使用的是`marked`库,可以添加一些配置来启用代码高亮:

   ```javascript
   const marked = require('marked');
   
   // 启用代码高亮
   marked.setOptions({
       highlight: function(code, lang) {
           if (lang && hljs.getLanguage(lang)) {
               return hljs.highlight(code, { language: lang }).value;
           }
           return hljs.highlightAuto(code).value;
       }
   });

   const html = marked(sourceMarkdown);
  1. 禁用HTML转义: 如果发布的文本被转义,可以在生成HTML时禁用转义:

    const showdown = require('showdown');
    const converter = new showdown.Converter();
    converter.setFlavor('github'); // 或其他支持代码高亮的flavor
    const html = converter.makeHtml(sourceMarkdown);
    
  2. 确保CSS样式: 确保发布页面包含用于代码高亮的CSS文件。例如,你可以使用highlight.js库:

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.0/styles/default.min.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.0/highlight.min.js"></script>
    <script>hljs.highlightAll();</script>
    

通过以上步骤,你应该能够在发布后仍然保持代码的高亮显示效果。


markdown 语法正确没有,放入 pre 标签了没?

我是直接用的markdown的在线编辑器编辑的:https://stackedit.io/,在论坛里面,没见到能高亮显示代码的帖子,显示和预览不是调用的同一方法么,按理说两者只是数据源的不同,其它是一致的啊.

test

console.log('hello')

我刚好提了PR

谢谢,已经 work 了。

在Node.js项目中,如果你在预览时看到JavaScript代码被正确高亮显示,但在发布后却显示不正常,这通常与你使用的编辑器、预览工具或发布工具有关。以下是一些可能的原因及解决方案:

1. 使用Markdown渲染器问题

确保你在使用Markdown渲染器时支持语法高亮。例如,如果你使用的是marked库,需要配置它以支持语法高亮。你可以通过引入highlight.js来实现这一点。

示例代码:

const marked = require('marked');
const hljs = require('highlight.js');

// 配置marked使用highlight.js进行语法高亮
marked.setOptions({
    highlight: function (code, lang) {
        return hljs.highlightAuto(code).value;
    }
});

const renderer = new marked.Renderer();
renderer.code = function (code, language) {
    const validLanguage = hljs.getLanguage(language) ? language : 'plaintext';
    return `<pre><code class="hljs ${validLanguage}">${hljs.highlight(code, { language: validLanguage }).value}</code></pre>`;
};

const markdown = `你的markdown代码`;
console.log(marked(markdown, { renderer: renderer }));

2. 缺少CSS样式文件

确保在发布后的HTML文件中包含语法高亮所需的CSS文件。highlight.js提供了一系列预定义的主题,如defaultdark等。

示例代码:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/default.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>

3. 文件路径问题

检查发布后的文件路径是否正确,确保所有依赖文件(如highlight.js的CSS和JS文件)都能被正确加载。

4. Markdown预览工具与发布环境不同

确保你在预览和发布的环境中使用相同的Markdown解析器和配置。有时候,预览工具可能会自动处理一些细节,而发布环境则不会。

通过上述步骤,你应该能够解决JavaScript代码在预览时高亮但在发布后丢失高亮的问题。如果问题依然存在,请检查具体的错误信息并提供更多上下文以便进一步诊断。

回到顶部