想有自己的博客吗?浏览器支持 MarkDown和语法高亮的最简单示例(使用markdown-it、highlight.js和mermaid)

简介: 想有自己的博客吗?浏览器支持 MarkDown和语法高亮的最简单示例(使用markdown-it、highlight.js和mermaid)

MarkDown,写作神器,还是有必要掌握一下。写作也是一种很重要的能力,需要长久坚持和锻炼。


写作能力重不重要?语文重不重要?读书重不重要?


我觉得语文和写作能力是所有能力的基础,是重中之重。因为你所有感知和获取的信息的加工整理都离不开语文,你对外界产生的理解和影响也离不来语文。它甚至可能影响你的求职,你的工作,你的人际关系。你对其他信息的感知和获取,机遇的把握等等都离不开它,鲁迅的一只笔杆子抵得上千军万马。


以下为一个最简单的,使浏览器支持MarkDown渲染和语法高亮的示例,可以为以后的个人的markdown博客储备。


后续计划写个专栏,介绍下自己做一个markdown的个人博客网站是多么的简单,写博客就成了往目录里丢md文件这样简单。


使用了流行的markdown-it(MarkDown渲染),highlight.js(语法高亮)和mermaid.js(画流程图、时序图等的js库)组件。


先看一个我的个人博客截图,后续准备开源出来,没使用数据库,只使用md文件和配置文件就完成了所有功能。


所以部署也很简单,不用先建库,建表,直接放到服务器的一个任意目录里运行即可,写博客就是往目录里丢md文件而已。


增加功能,把微信公众号打通,使用自己的公众号发布文章,直接电脑上编译好md文件,往聊天窗口一丢就完成了文章的发布。至于文章分类,文章排序和推荐文章,都是内部搞了个算法自动完成的。且前台如果有新评论或留言,会自动推送到我的公众号里。






附图,测试demo浏览器显示出来的效果:




附个人的markdown博客截图,使用go语言加mardown实现。

 

附demo的完整的html的使用代码,仅在一个html文件中,可直接用浏览器打开运行看到效果:


<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8"/>
  <title>markdown in the browser</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/railscasts.min.css">
  <link rel="stylesheet" href="./mytable.css">
  <!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/atom-one-dark.min.css"> -->
  <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script>
  <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.0.0/build/highlight.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/10.0.0/markdown-it.min.js"></script>
  <script src="https://cdn.bootcss.com/mermaid/8.0.0-rc.8/mermaid.min.js"></script>
  <style>
  .md_source{
    display: none
  }
  </style>
</head>
<body>
<pre class="md_source">
# Welcome to Yang's Blog! 
this is a most simple demo, used markdown-it and highlight.js in the browser to rendering markdown files
## used markdown-it in the browser
> 你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器。  
可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
***
Rendered by **markdown-it**.
### 表格demo,欢迎使用Markdown
Name    | Age
--------|------
Bob     | 27
Alice   | 23
### 代码高亮例子
```golang
package main
import "fmt"
func main() {
  fmt.Println("hello ")
}
```
# 一级标题
## 二级标题
### 三级标题
### 表格例子 欢迎使用Markdown
| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |   
### 链接
[baidu](https://baidu.com)
### 插入图片
![imgs](https://ucc.alicdn.com/images/user-upload-01/2019091813595558.png)
- 项目
  - 项目
  - 项目
- 列表信息
  + 二级列表
    * 三级列表  
1. 项目1
2. 项目2
3. 项目3
- [ ] 计划任务
- [x] 完成任务
创建脚注格式类似这样 [^RUNOOB]
> 最外层
> > 第一层嵌套
> > > 第二层嵌套
```mermaid
graph LR
  A --- B
  B-->C[fa:fa-ban forbidden]
  B-->D(fa:fa-spinner);
```
</pre>
<div class="mermaid">
  graph LR
    A --- B
    B-->C[fa:fa-ban forbidden]
    B-->D(fa:fa-spinner);
  </div>
<div class="md_render">
</div>
  <script>
  var md;
  var defaults = {
    html: false, // Enable HTML tags in source
    xhtmlOut: false, // Use '/' to close single tags (<br />)
    breaks: false, // Convert '\n' in paragraphs into <br>
    langPrefix: 'language-', // CSS language prefix for fenced blocks
    linkify: true, // autoconvert URL-like texts to links
    typographer: true, // Enable smartypants and other sweet transforms
    // options below are for demo only
    _highlight: true,
    _strict: false,
    _view: 'html' // html / src / debug
  };
  const mermaidChart = (code) => {
  try {
    mermaid.parse(code)
    return `<div class="mermaid">${code}</div>`
  } catch ({ str, hash }) {
    return `<pre>${str}</pre>`
  }
  }
  defaults.highlight = function (str, lang) {
    var esc = md.utils.escapeHtml;
    console.log(str)
    console.log(lang)
    if (lang && hljs.getLanguage(lang)) {
    try {
      return '<pre class="hljs"><code>' +
         hljs.highlight(lang, str, true).value +
         '</code></pre>';
    } catch (__) {}
    }else if(lang == 'mermaid'){
    return mermaidChart(str)
    //return '<pre class="mermaid">' + mermaid.mermaidAPI.render('mermaid', str) + '</pre>';
    }else{
    return '<pre class="hljs"><code>' + esc(str) + '</code></pre>';
    }
  };
  md = window.markdownit(defaults);
  $('.md_render').html(md.render($('.md_source').html()));
  mermaid.initialize({startOnLoad:true});
  </script>
  </body>
</html>
相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
29天前
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
104 48
|
1月前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式
|
3天前
|
存储 安全 Linux
全平台免费的在线笔记本(支持markdown、mermaid)
StackEdit是一款基于浏览器的Markdown编辑器,支持跨平台使用,无需安装,可将笔记存储在gitee、github等平台上。其优势包括内容安全免费、多平台同步、离线可用、支持UML图和流程图绘制等。通过简单的步骤即可完成注册、登录和笔记创作,并能轻松实现在线共享。
20 0
|
1月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
29天前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
34 1
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
111 1
|
1月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
246 9
|
21天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
596 1
|
2月前
|
前端开发 Java 程序员
技术博客入门与Markdown技术的运用
技术博客入门与Markdown技术的运用
21 1