亮插件主要可以让<pre></pre>标签里面的代码高亮,就跟编辑器里显示的一样,有利于阅读,有利于用户体验,常用的highlight.js ,这里要说的是更加轻量的选择——Prism.js
为什么选择 Prism.js ?
极致易用
引用 prism.css 和 prism.js,使用合适的 HTML5 标签(code.language-xxxx),搞定!
天生伶俐
语言的 CSS 类是可继承的,所以你只需定义一次就能应用到多个代码片段。
轻如鸿毛
代码压缩后只有 1.6KB。每添加一个语言平均增加 0.3-0.5KB,主题在 1KB 左右。
快如闪电
如果可能,支持通过 Web Workers 实现并行。
轻松扩展
定义新语言或扩展现有语法,或者新增功能都非常简单。
丰富样式
所有的样式通过 CSS 完成,并使用合理的类名如:.comment, .string, .property 等。
有谁在使用?
许多网站都在使用 Prism,如果你是前端开发者,那你一定十分熟悉这些网站:
这些网站在使用 Prism.js
连 JavaScript 之父 Brendan Eich 也在个人博客上使用!
如何使用:
你只需要在页面上引入prism.css和prism.js文件:
遵循 HTML5 标准,Prism 使用语义化的 <pre> 元素和 <code> 元素来标记代码区块:
演示:http://prismjs.com/test.html
下载 http://prismjs.com/download.html
来源:切图网(qietu.com),前端学习加微信 dingxiangming82
今天要介绍的是一款在Web开发中的轻量级代码高亮插件——PRISM(中文名:棱镜),它是一个基于现代Web开发语言标准构建的,在很多网站都使用到了它。例如我们熟知的React官网,就用到了它,下面截图就可以看到效果。
react
https://prismjs.com/
官网给我们提供了自定义的下载prism的方式,即我们可以分主题,分支持的语言、分扩展插件、以及分开发版和压缩版,如下图所示:
主题选择
prism提供了几乎所有语言的支持,我们截图大致看一下它支持的语言:
语言支持
语言支持
语言支持
由于官网的排版问题,部分内容可能没有截图完整,下面再看一下它支持的插件
插件支持
我选择的是压缩版,然后勾选上了所有插件和所有支持的语言,prism.js和prism.css合在一起大小是370.62k。实际上我们根本用不了这么多,因此我们在用的时候没有这么大。
基本用法
<pre> <code class="language-css">p { color: red }</code> </pre>
显示的效果如下,这是一个最简单的实例
实例
我们来尝试稍微复杂点的,右上角会显示语言和复制,非常的实用,比如我们搭建自己的博客或者记录笔记等场景。
实例
我这里分别使用JavaScript、Java、C#和Python语言进行了简单的测试,使用的是官网提供的Coy主题,效果如下图,还有太多的语言就不一一测试了。
常见语言
$ npm install prismjs import Prism from 'prismjs';
这个地方可能需要Babel-plugin-prmjs插件来管理你的语言等等配置。
var Prism=require('prismjs'); // 你想使用高亮的代码片段 var code="var data=1;"; // 返回一个html字符串 var html=Prism.highlight(code, Prism.languages.javascript, 'javascript');
我们这里使用React的一段代码进行演示,它是支持JSX代码高亮的
默认主题
Dark主题
funky主题
Okaidia主题
Twilight主题
coy主题
Solarized Light主题
Torrow Night
Prism支持的语言实在是太多了,我这里就不在一一演示,大家感兴趣的可以自己去研究研究,官网提供了完整的Demo,还支持各种扩展,例如显示行号这样的需求,它都可以实现,代码高亮的插件有不少,大家可以在评论区留下你自己使用的哪一个,每款插件都只是一种选择,选择一个适合自己的或者自己喜欢的就可以了,希望本文对你有所帮助,感谢支持!
过一个阶段测试,终于找到两个 markdown 转 html 并实现代码高亮的工具,并以最简代码(几十行)实现了炫酷的展示效果。步骤很少,也很简单,零基础也应该一看就会。往下看吧......,需要安装有Node环境哦!
因为markdown 文档编辑器具有语法简单、文件简洁、标准化、使用广泛等特点,所以一直习惯采用 markdown 编辑器写文章,但仍有一些网站不支持 markdown 编辑器,想尝试将 markdown 转成 html 再发布,采用 Javascript 来实现,尤其想达到 CSDN 博客、简书这样的展示效果。
图1 CSDN 博客 markdown 文章及代码块高亮效果
图2 简书 markdown 文章及代码高亮效果
比较常用的 M2H 插件有:
从网上获得的 markdown-it 和 marked 的比较,主要表现在:在性能、使用简单程度、正则解析(中文支持)方面,marked 比较好;在扩展性上,markdown-it 表现则更好一些。 由于 markdown 应用比较成熟,而且一般使用也不会太复杂,所以选择性能好、中文支持好的 marked,至于 marked 的扩展性,也尝试了一下,满足常见的应用是没问题的。
代码块高亮插件有:
对 heiglightjs 和 prismjs 分别做了简单测试,发现 prismjs 使用非常简单,易于上手,且代码精简,效率高,而 heiglightjs 相对比较复杂,使用起来不习惯,也许是各人喜好不同吧。所以选择使用 prismjs 插件。
M2H 一般有两种应用模式:一种是前端渲染,如在 vue 中使用;另一种是在后端生成 html 文件,在浏览器展示,如在 node 中使用。 此处我选择在 node 中生产静态 html 文件的应用模式,用户可以在电脑端当作 markdown 转 node 的工具使用; 至于前端渲染,vue 页面打包时总会包含一个 chunk-vendors.js 文件,会引起页面加载变慢,有很多办法压缩该文件,但这已经超出了 M2H 的范畴了,在此不再赘述。
图3 最终实现的markdown 转化及代码块渲染效果
创建目录:marked-prismjs,使用 vsCode 打开该目录。
在 vsCode 里的终端输入相关命令进行插件安装 1)安装 marked 插件
npm install marked --save
2)安装 prismjs
npm install prismjs --save
访问官网下载页:https://prismjs.com/download.html
图4 themes 选项
图5 编程语言包选项
图6 插件选项
# 这是H1标签
## 下面是 javascript 代码:
```javascript let a=1; console.log(a); ```
创建 m2h.js 文件,内容为:
const { marked }=require('marked') // 引入 marked 模块
const prism=require('prismjs') // 引入 prism 模块
const fs=require('fs') // 引入文件处理模块
const mdContent=fs.readFileSync('test.md', 'utf-8') // 读取 markdown 文件内容
// 下面是 marked 扩展功能,当节点(token)类型是代码(code)时,自定义渲染节点功能,及使用自定义的 renderer 函数来代替默认 renderer 函数,达到改写当前节点生成的 html 代码的样式
marked.use({
extensions: [{
name: 'code',
renderer(token) {
if (token.type==='code') {
let codeHtml=`<pre class="language- round"><code class="language-`+token.lang+` line-numbers">`
codeHtml+=Prism.highlight(token.text, Prism.languages.javascript, 'javascript')
codeHtml+=`</code></pre>`
return codeHtml
}
}
}]
})
// 定义 html 文件头部代码
var htmlContent=`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="prism.css">
<script src="prism.js"></script>
</head>
<style>
.round {
box-shadow: 10px 10px 5px #888888;
border-radius: 10px;
}
</style>
<body>
`
htmlContent +=marked.parse(mdContent) // 叠加上 marked 生成的 html 代码
htmlContent+=`</body> // 叠加底部代码(补齐)
</html>`
fs.writeFileSync('test.html', htmlContent) // 将最终的 html 内容写入到文件 test.html
测试运行:
node m2h.js
每运行一次,就会重新生成新的 test.html 文件。
在 vsCode 里鼠标右键点击 test.html 文件,选择“Open with Live Server”,
图7 Open with LiveServer
会在浏览器里打开 test.html 页面,test.md 已经成功生成了 test.html,实现了代码块高亮、语言显示及拷贝按钮及行号。得到的最终结果如下图:
图8 效果展示
达到了当初计划实现的功能需求。
以上通过简单的几十行代码就实现了如此炫酷的功能展示,体现了插件的强大功能,同时通过自定义扩展节点渲染函数,也展现了插件的灵活性和可扩展性。此次测试仅仅是个引子,后续会继续进行研究和测试,感兴趣请收藏、关注,方便共同学习、进步。
*请认真填写需求信息,我们会在24小时内与您取得联系。