为了账号安全,请及时绑定邮箱和手机立即绑定

showdown.js的markdown语法高亮问题

showdown.js的markdown语法高亮问题

Cats萌萌 2018-10-13 11:10:22
我在制作个人博客,使用ajax获取markdown文件,使用showdown.js来解析markdown语法。目前进行得比较顺利,但是有一个问题,我一直没有找到我满意的语法高亮解决方案。我尝试使用过showdown-highlight来实现语法高亮,效果也比较让人满意,只是在webpack打包的时候出现了这样的报错:ERROR in bundle.js from UglifyJs SyntaxError: Unexpected token punc «(», expected punc «:» [./~/showdown-highlight/lib/index.js:20,0]这个比较尴尬,毕竟代码肯定是要压缩的,否则2MB的js文件加载起来实在太慢了。我尝试查阅了highlight.js的文档,没有相关的信息。我翻阅了showdown的相关issue,看到有提供这样的解决方案:我之前在webpack里引用是这样的:var showdown = require('showdown'),     showdownhighlight = require('showdown-highlight');     var converter = new showdown.Converter({extensions: [showdownhighlight]});这种引用方式和issue里的解决方案有所不同,琢磨半天也没琢磨透,请问有什么更好的解决方案吗?
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

var converter = new showdown.Converter({extensions: function() {

  function htmlunencode(text) {

    return (

      text

        .replace(/&/g, '&')

        .replace(/&lt;/g, '<')

        .replace(/&gt;/g, '>')

      );

  }

  return [

    {

      type: 'output',

      filter: function (text, converter, options) {

        // use new shodown's regexp engine to conditionally parse codeblocks

        var left  = '<pre><code\\b[^>]*>',

            right = '</code></pre>',

            flags = 'g',

            replacement = function (wholeMatch, match, left, right) {

              // unescape match to prevent double escaping

              match = htmlunencode(match);

              return left + hljs.highlightAuto(match).value + right;

            };

        return showdown.helper.replaceRecursiveRegExp(text, replacement, left, right, flags);

      }

    }

  ];

}()});

比较粗暴地把后面的匿名函数当成参数传入,就可以实现了。

查看完整回答
反对 回复 2018-11-08
  • 1 回答
  • 0 关注
  • 1169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号