解决markdown-it-prism未能正确加载Languages的BUG
本文首发在我的个人博客:https://jlice.top/p/7vg1g/。欢迎大家前去参观,么么哒~
在hexo博客同步至csdn - 木然轩一文中,我提到了prismjs
在尝试渲染C++代码块时不能正确加载node_modules/prismjs/components/prism-cpp.js
。于是,我在prismjs
的GitHub项目上提交了Pull Request:cpp extend clike by jlice · Pull Request #1914 · PrismJS/prism。不过,prismjs
的项目维护者却告诉我,这锅prismjs
不背,是markdown-it-prism
自己的问题。
其实在提交这个Pull Request时我也觉得奇怪,prismjs
的用户基数那么大,而C++也是非常常见的语言,要是出现这种问题早就解决了。不过,我的确是在一顿Debug后找到了出错的位置,但这个出错的位置是错误的果,未必是错误的因。
prismjs
prismjs
是一个代码块高亮的库,其作用和highlight.js
差不多,有点像Python里的Pygments
。大致看了下prismjs
的源码,感觉主要就是用正则表达式描述了各编程语言的文法,然后做词法分析,对各种类型的token应用相应的样式。下面是prismjs
的目录结构:
components
目录是对各语言的定义,plugins
是一些功能增强插件,themes
就是主题了。例如,prism/components/prism-cpp.js中就定义了C++的文法:
Prism.languages.cpp = Prism.languages.extend('c', {'class-name': {pattern: /(\b(?:class|enum|struct)\s+)\w+/,lookbehind: true},
...
它扩展自C。类似地,在prism/components/prism-c.js中定义了C的文法:
Prism.languages.c = Prism.languages.extend('clike', {...
而clike没有扩展自别的语言,应该在prism
作为一种基本的语言类型。
在Debug的过程中,我在prism/components/prism-core.js中发现了DFS递归查找语言定义。心想,都有DFS了,怎么就不能正确加载呢,路径都没问题呀。
loadPrismLang
经prismjs
维护者提示,找到了问题之所在。位于markdown-it-prism/index.js的loadPrismLang函数内:
require('prismjs/components/prism-' + lang);
对于C++,lang
的值应是cpp
。这里它就直接调用prismjs/components/prism-cpp这个模块了,可根据前面的分析,它extend自prism-c,而prism-c又extend自prism-clike。因此,像这样直接调用会出错的,应该使用prismjs
里提供的loadLanguages
,它可以自动处理依赖关系。在prismjs
的官方文档上也提到了这一点:
这个函数定义在prism/components/index.js。于是乎,就给markdown-it-prism
提交了个Pull Request。
如果通过npm
安装markdown-it-prism
,可以发现index.js
位于build
目录下,而markdown-it-prism
的GitHub项目里,index.js
位于项目的根目录,而且这两个index.js
的内容不一样。通过查看项目下的package.json,可以了解到项目是使用babel编译的,用mocha来测试的。编译、测试一下,一切OK。结果GitHub用TravisCI跑一下,在老版本Nodejs上未能通过测试:
不过,这并不代表修改是错误的,也许是测试用例没有更新。
Pull Request
markdown-it-prism
项目的维护者Merge了我的Pull Request:
而且,也添加了我的测试用例。
解决markdown-it-prism未能正确加载Languages的BUG相关推荐
- 未能加载文件或程序集_完美解决未能正确加载Visual C++资源编辑器包问题
问题:在使用VS2010过程中,出现未能正确加载"Visual C++ Resource Editor Package"的错误提示,同时工程的资源文件不能打开,出现加载失败. 原因 ...
- vs2012 怎样解决 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包的问题
vs2012 怎样解决 未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage"包的问题 参考文章: ( ...
- VS2013出现未能正确加载 microsoft.visualstudio.editor.implementation.editorpackage的解决方法
出现这个问题的原因可能是配置更改或安装了另一个扩展,幸好之前用的不多,重新进行用户配置代价也不高,打开Visual Studio Tools: 选择VS2013 开发人员命令提示: 输入devenv ...
- VS未能正确加载 ”Microsoft.VisualStudio.Editor.Implementation.EditorPackate“包错误解决方法...
VS未能正确加载 "Microsoft.VisualStudio.Editor.Implementation.EditorPackate"包错误解决方法 很久没用VS了,打开后出现 ...
- VS2010打开项目提示未能正确加载解决方案中一个或多个项目
今天打开vs2010项目,竟然提示"未能正确加载解决方案中一个或多个项目",还有什么详细去输出看,我在网上找了下,没有解决,我看输出下边是说"C:\Program Fil ...
- Visual studio 2017 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包...
装完win10更新 发现vs杯具了- 提示 未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage"包 ...
- 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包。
最近在升级 Visual Studio 2015 Update 3 的过程中,等了很长时间都没一点进展,于是就强行终止了升级程序,但VS也因此出了问题. 后来经过修复,不行,卸载再重装,仍然提示这个错 ...
- 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage“提示信息
在安装过vs2015之后出现未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage"提示信息在V ...
- 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage
未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage, Microsoft.VisualStudio.Edito ...
最新文章
- python下载教程1001python下载教程-1001种玩法 | Python 学习指南资源
- 小程序框架之wepy报错问题
- LightOJ 1259 Goldbach`s Conjecture 素数打表
- OpenCV使用函数compareHist的实例(附完整代码)
- github网址无法访问怎么办?
- Ph.D Grind 阅读感想 By 张雄
- 扁平化女装shop商城模板
- android 签名报错,AndroidStudio生成签名apk报错
- matlab2c使用c++实现matlab函数系列教程-cumprod函数
- CentOS 7.2.5 安装 Redis 与 远程访问
- PostGreSQL8.0.0中文手册
- 计算机毕业设计(附源码)python-志愿者管理系统
- UE4面试基础知识(一)
- Unity Recorder屏幕录制问题
- DFS基础-----刷题合集--1(全排列,八皇后,迷宫),让你明白DFS的基础用法
- 多可文档管理系统_您的框架有多可扩展性?
- openEuler Summit | 江大勇:凝聚创新力量 逐梦数字时代星辰大海
- 杭电OJ 1047(C++)
- 爬取豆瓣电影中各种类型电影名称与评分
- 动态获取织梦CMS最新更新 利于收录的SiteMap.php文件