整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          一款輕量語法高亮插件-Prism.js

          一款輕量語法高亮插件-Prism.js

          亮插件主要可以讓<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。實際上我們根本用不了這么多,因此我們在用的時候沒有這么大。

          基本使用方法

          • 首先我們得在頁面引用我們的css和js文件

          基本用法

          • 標準的寫法我們需要使用pre和code標簽,就像下面這樣,code的class可以指定顯示的語言
          <pre>
           <code class="language-css">p { color: red }</code>
          </pre>
          

          顯示的效果如下,這是一個最簡單的實例

          實例

          我們來嘗試稍微復雜點的,右上角會顯示語言和復制,非常的實用,比如我們搭建自己的博客或者記錄筆記等場景。

          實例

          常見語言測試

          我這里分別使用JavaScript、Java、C#和Python語言進行了簡單的測試,使用的是官網提供的Coy主題,效果如下圖,還有太多的語言就不一一測試了。

          常見語言

          ES6或者其他用法

          $ npm install prismjs
          
          import Prism from 'prismjs';
          

          這個地方可能需要Babel-plugin-prmjs插件來管理你的語言等等配置。

          在nodejs中使用

          var Prism=require('prismjs');
          // 你想使用高亮的代碼片段
          var code="var data=1;";
          // 返回一個html字符串
          var html=Prism.highlight(code, Prism.languages.javascript, 'javascript');
          

          主題預覽

          我們這里使用React的一段代碼進行演示,它是支持JSX代碼高亮的

          • 默認的主題樣式

          默認主題

          • Dark主題樣式

          Dark主題

          • funky主題樣式

          funky主題

          • Okaidia主題樣式

          Okaidia主題

          • Twilight主題樣式

          Twilight主題

          • coy主題樣式

          coy主題

          • Solarized Light主題樣式

          Solarized Light主題

          • Torrow Night主題樣式

          Torrow Night

          總結

          Prism支持的語言實在是太多了,我這里就不在一一演示,大家感興趣的可以自己去研究研究,官網提供了完整的Demo,還支持各種擴展,例如顯示行號這樣的需求,它都可以實現,代碼高亮的插件有不少,大家可以在評論區留下你自己使用的哪一個,每款插件都只是一種選擇,選擇一個適合自己的或者自己喜歡的就可以了,希望本文對你有所幫助,感謝支持!

          過一個階段測試,終于找到兩個 markdown 轉 html 并實現代碼高亮的工具,并以最簡代碼(幾十行)實現了炫酷的展示效果。步驟很少,也很簡單,零基礎也應該一看就會。往下看吧......,需要安裝有Node環境哦!

          1 緣起

          因為markdown 文檔編輯器具有語法簡單、文件簡潔、標準化、使用廣泛等特點,所以一直習慣采用 markdown 編輯器寫文章,但仍有一些網站不支持 markdown 編輯器,想嘗試將 markdown 轉成 html 再發布,采用 Javascript 來實現,尤其想達到 CSDN 博客、簡書這樣的展示效果。

          圖1 CSDN 博客 markdown 文章及代碼塊高亮效果

          圖2 簡書 markdown 文章及代碼高亮效果

          2 插件選擇及應用模式

          2.1 插件選擇

          2.1.1 markdown 轉 html 插件

          比較常用的 M2H 插件有:

          • Markdown-it 中文:https://markdown-it.docschina.org/ github:https://github.com/markdown-it/markdown-it
          • Marked 官網:https://marked.js.org/ github:https://github.com/markedjs/marked

          從網上獲得的 markdown-it 和 marked 的比較,主要表現在:在性能、使用簡單程度、正則解析(中文支持)方面,marked 比較好;在擴展性上,markdown-it 表現則更好一些。 由于 markdown 應用比較成熟,而且一般使用也不會太復雜,所以選擇性能好、中文支持好的 marked,至于 marked 的擴展性,也嘗試了一下,滿足常見的應用是沒問題的。

          2.1.2 代碼塊高亮模塊

          代碼塊高亮插件有:

          • heiglightjs 官網:https://highlightjs.org/ github:https://github.com/highlightjs/highlight.js
          • prismjs 官網:https://prismjs.com/ github:https://github.com/PrismJS/prism

          對 heiglightjs 和 prismjs 分別做了簡單測試,發現 prismjs 使用非常簡單,易于上手,且代碼精簡,效率高,而 heiglightjs 相對比較復雜,使用起來不習慣,也許是各人喜好不同吧。所以選擇使用 prismjs 插件。

          2.2 插件應用模式

          M2H 一般有兩種應用模式:一種是前端渲染,如在 vue 中使用;另一種是在后端生成 html 文件,在瀏覽器展示,如在 node 中使用。 此處我選擇在 node 中生產靜態 html 文件的應用模式,用戶可以在電腦端當作 markdown 轉 node 的工具使用; 至于前端渲染,vue 頁面打包時總會包含一個 chunk-vendors.js 文件,會引起頁面加載變慢,有很多辦法壓縮該文件,但這已經超出了 M2H 的范疇了,在此不再贅述。

          3 計劃實現的功能

          • 讀取指定 mardown 文件(test.md),生成目標 html 文件(test.html)——測試 marked 插件解析及渲染功能
          • html 文件根據代碼塊對應的語言進行高亮顯示——測試 prismjs 插件的 language 語言包功能
          • html 文件實現顯示語言名稱、“復制”按鈕、行號——測試 prismjs 插件的 Plugins 功能
          • 自定義代碼塊的顯示樣式修改——測試拓展功能
          • 最終實現的界面如下圖:

          圖3 最終實現的markdown 轉化及代碼塊渲染效果

          4 編碼實現

          4.1 準備工作

          4.1.1 創建項目

          創建目錄:marked-prismjs,使用 vsCode 打開該目錄。

          4.1.2 安裝插件

          在 vsCode 里的終端輸入相關命令進行插件安裝 1)安裝 marked 插件

          npm install marked --save

          2)安裝 prismjs

          npm install prismjs --save

          4.1.3 下載 prismjs 的 css 和 js 文件

          訪問官網下載頁:https://prismjs.com/download.html

          • 按下圖選擇 themes,我比較喜歡“Tomorrow Night” 這個主題,您可以根據自己的喜好選擇

          圖4 themes 選項

          • Languages 選項,默認即可,如下圖,其中包含 CSS、Javascript 語言

          圖5 編程語言包選項

          • Plugins 選項,可以根據功能需要選擇,此處選擇4個選項,依次為:行號、顯示語言名稱、工具條、復制到剪貼板的按鈕,如下圖:

          圖6 插件選項

          • 分別點擊下圖的“DOWNLOAD JS”和“DOWNLOAD CSS”按鈕下載 prism.js 和 prism.css 到項目根目錄下。

          4.1.4 編寫 markdown 測試文件

          • 編寫 markdown 測試文件:test.md,內容如下:

          # 這是H1標簽

          ## 下面是 javascript 代碼:

          ```javascript let a=1; console.log(a); ```

          4.2 編寫實現轉換功能的 js 文件

          創建 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 效果展示

          達到了當初計劃實現的功能需求。

          5 總結

          以上通過簡單的幾十行代碼就實現了如此炫酷的功能展示,體現了插件的強大功能,同時通過自定義擴展節點渲染函數,也展現了插件的靈活性和可擴展性。此次測試僅僅是個引子,后續會繼續進行研究和測試,感興趣請收藏、關注,方便共同學習、進步。


          主站蜘蛛池模板: 亚洲色精品VR一区区三区| 久久精品国产亚洲一区二区三区| 在线精品一区二区三区| 亚洲国产日韩在线一区| 在线观看国产一区二三区| 国产成人午夜精品一区二区三区 | 亚洲日韩一区二区一无码| 国产精品一区二区久久精品| 无码一区二区三区| 夜夜精品视频一区二区| 中文字幕一区二区三区永久| 色偷偷av一区二区三区| 一区二区三区四区在线观看视频| 国产一区二区三区免费观看在线 | 国产在线精品观看一区| 国产剧情国产精品一区| 国产福利电影一区二区三区,亚洲国模精品一区 | 精品无码一区二区三区亚洲桃色| 国精品无码A区一区二区| 日韩人妻一区二区三区免费| 亚洲色偷精品一区二区三区| 在线精品亚洲一区二区三区| 无码少妇一区二区性色AV| 在线|一区二区三区四区| 国产日本一区二区三区| 精品福利视频一区二区三区| 亚洲av无码一区二区三区四区| 亚洲无码一区二区三区| 国产精品一区二区三区99| 久久久久一区二区三区| 国产免费一区二区三区| 精品一区二区三区水蜜桃| 国产一区二区三区在线影院| 一区二区网站在线观看| 一区二区三区在线观看免费| 久久精品国产一区二区三区| 久久无码人妻一区二区三区午夜 | 亚洲一区二区三区不卡在线播放| 在线免费观看一区二区三区| jazzjazz国产精品一区二区| 亚洲一区二区精品视频|