Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在 hexo 3.8.0 下 hexo-prism-plus 无法正确加载 #1

Closed
Aetf opened this issue Dec 12, 2018 · 4 comments
Closed

在 hexo 3.8.0 下 hexo-prism-plus 无法正确加载 #1

Aetf opened this issue Dec 12, 2018 · 4 comments

Comments

@Aetf
Copy link
Owner

Aetf commented Dec 12, 2018

来自邮件:

具体来说是在3.8.0的hexo下无法正确地加载hexo-prism-plus,debug了很久没有结果,特地发邮件向你请教。
我在安装了hexo 3.8.0 、hexo-prism-plus 1.1.0后,通过 hexo server --debug 命令启动服务,控制台可以看到插件已经被加载,除此之外没有任何报错信息。打开网页,博客文章中代码部分并没有被高亮,打开开发者工具查看HTML元素,本应该被inject进来的prism.js和prism.css都没有在html找到,Network中也没有找到相关文件的http请求。我怀疑是Inject没有正确执行,查看了hexo-prism-plus的源码,发现依赖了 hexo-inject 包,这个包在npm网站上已经被标记为deprecated,并且也发现了github上有一个关于 hexo-inject 是否还兼容 hexo 3.8.0 的Issue(hexojs/hexo#2704

@Aetf
Copy link
Owner Author

Aetf commented Dec 12, 2018

hexo-prism-plus 是兼容 hexo 3.8.0 的,我自己的博客就用了最新的 3.8.0 版本没有问题。

关于 hexo-inject,虽然已经被标记为 deprecated,但是代码方面仍然是支持 hexo 3.8.0 的。那个 issue 是讨论 hexo-inject 是否支持最新的默认主题。

在没有看到更多具体信息的情况下,我有以下几个猜测:

  • hexo-prism-plus 只会在找到相应 code block 的页面中 inject prism.js 和 prism.css,所以可能 code block 没有被正确识别。你可以检查一下 markdown 文件中相应 code block 是否正确
  • 如果使用的是默认主题,也许由于某些原因 hexo-inject 不能正确工作,即 issue 2704 里讨论的问题(我没有仔细追踪那个 issue,这只是我的猜测)。由于我没有使用默认的主题,所以没有测试过这个。

@Deardrops
Copy link

按照你的猜测排查了一下,并没有什么收获。😞
已发送一个 demo 到你的邮箱。

@Aetf
Copy link
Owner Author

Aetf commented Dec 14, 2018

原因是 hexo-inject 没有出现在 package.json 的 dependencies 中,而 hexo 本身是通过 package.json 的 dependencies 来加载插件的,所以 hexo-inject 没有被加载。。。把 hexo-inject 加到 demo 的 package.json 中之后 prism 就正常工作了。

所以问题在于 package.json 的 postinstall 不能完全保证 hexo-inject 也被安装,( yarnpkg/yarn#5476, yarnpkg/yarn#853 ),然而我并不熟悉 yarn。解决方法:

  • 更新文档说明确保用户自己安装 hexo-inject
  • 换用更通用的方法来替换 postinstall

@Deardrops 你试试看把 hexo-inject 加到 package.json 里之后行不行,可以的话我就先把文档更新一下

@Deardrops
Copy link

将 hexo-inject 加到 package.json 后,正确工作了。
看来用户初次安装时得先运行一下 npm install hexo-inject -s 才行。
非常感谢你的帮助!

@Aetf Aetf closed this as completed in 5b1cdab Dec 14, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants