【新瓶装旧酒】使用 VitePress 移植 Cocos 文档

【新瓶装旧酒】使用 VitePress 移植 Cocos 文档

众所周知,Cocos 文档是使用 GitBook 发布的,如今已经有了更多成熟的静态网站生成器来构建个性化的开发文档,那么 Cocos 文档是不是也能换件新衣服呢?

正巧最近在学 Vue3 的时候,发现 Vue3 是由 VitePress 构建的,作为出名的前端技术团队维护的静态站点生成器,想必有其特别之处,跑去看了下 VitePress 开发文档,没想到上手如此的简单快捷,就萌生了移植 Cocos 文档的想法。

先上效果图:

如果觉得效果还不错,可以到 Cocos | Cocos 在线体验一下(挂在 github.io 仓库的,可能需要科学上网),由于移植的工作量主要在于侧边栏的移植,目前 500 多篇文章只有 100 多篇显示在了侧边栏,这还只是中文文档(英文文档也是 500 篇),所以在线版的并不完整。感兴趣的话可以到 GitHub 仓库 来参与移植,或者 fork 下来自己把玩也行。

自动化移植

手动移植是最笨的方法,而且非常消磨精力,所以就得考虑下自动化移植。

移植主要的内容是侧边栏,GitBook 的侧边栏目录写在一个 Markdown 文件中,想要自动化移植,可以使用 mdast-util-from-markdown Nodejs 库来读取 Markdown抽象语法树,然后再生成一份对应的 JSON 格式目录配置,粘贴到 VitePress 项目的 config.ts 中就行了。

限于我本人能力太菜,精力有限,这个课题就交给感兴趣的同学去研究吧。

VitePress 移植踩坑

如果你想了解更多,下面我会分享我在移植过程中遇到的各种坑。

img 标签路径错误

在 Cocos 官方文档中,相当部分的图片使用了 img 标签来引入,例如:


# 使用 JSB 手动绑定

...

<a href="jsb/infrastructure.png"><img src="jsb/infrastructure.png" alt=" "></a>

<div style="text-align:center"><p>新版 ABCmouse 的应用架构:基于 callStaticMethod 与 evalString 进行通信</p></div>

这个 Markdown 文件在开发时不会报错,但是在构建时就会报如下的错误:


build error:

Error: [vite]: Rollup failed to resolve import "jsb/infrastructure.png" from "E:/myWorkSpace/docs/cocos-docs-vitepress/docs/zh/manual/advanced-topics/jsb-manual-binding.md".

This is most likely unintended because it can break your application at runtime.

If you do want to externalize this module explicitly add it to

build.rollupOptions.external

这个报错困扰了我很久,在 VitePress 的 GitHub 仓库的 issue 中也没能找到解决方案。最终发现是因为引用的路径有误,正确的路径应该加上 “./”,做法如下:


<a href="./jsb/infrastructure.png"><img src="./jsb/infrastructure.png" alt=" "></a>

巧用 VSCode 的搜索功能来批量替换。

丢失终止标签

报错如下:


Element is missing end tag

有些标签是需要成对的,会有一个形如 </> 的终止标签,如果遇到这个报错,就得看看是不是哪个标签少了个 /

错误的扩展名

cocos-docs 中部分图片使用的大写字母 .PNG 结尾,这也会使 VitePress 在构建时报错,修改成小写 .png 即可。

还有几个报错,相对这几个都是小问题,可以去 VitePress 上搜相关的 issue,不过还是吐槽一句,终归还是部分 Markdown 文档不够规范。不过目前 VitePress 处于 Beta 阶段,可能很多异常情况没能做处理,所以暴力移植没办法一帆风顺。

结尾

最近看到 Dashboard 马上要翻新了,手册文档是不是也该翻新一下,新瓶装旧酒。文档虽然还有进步空间,但看着舒服也算能赢一半吧(狗头)。

相关链接

VitePress 开发文档:https://vitepress.new/

VitePress 仓库:https://github.com/vuejs/vitepress

Cocos 文档官方仓库:https://github.com/cocos/cocos-docs

VitePress 版 Cocos 文档体验地址:Cocos | Cocos

VitePress 版 Cocos 文档仓库:https://github.com/CosmoLau/cocos-docs-vitepress

4赞

适合开箱即用,但不合适深度定制
我更喜欢 docusaurus,可以很方便加各种插件,比如

模板网站可以体验(需梯),https://1226085293.github.io/docs/intro

诶. 我就喜欢这种小巧灵活高效的小工具.

有一个与楼上不是同一个类型的文档系统,也可以推荐下-mindoc

其实我们的文档页面已经做了挺深度的定制,3.8 还会有一次小调整。我们会更倾向于自己维护一套。关键看是解决了什么问题,产生了什么价值,如果不改会有什么后果。

还可以试试这个把文档喂给AI,然后像ChatGPT一样以询问方式来查询文档~
https://markprompt.com/

个人拙见,我认为目前的文档不太适合扩展多语言。

首先是文档的预览与构建,按照仓库的搭建步骤,很可能卡在 gulp 上,无法启动文档服务进行预览,更不要说构建文档了。gulp 需要特定的 nodejs 版本环境,使用 npm run preview 命令提示的报错,就算问 ChatGPT,也只会回答说 nodejs 版本太高或者太低,还是不知道具体要用哪个 nodejs 版本。如果使用其他的静态站点部署工具,应该会省去这部分烦恼,也能降低萌新使用的门槛。

基于以上原因,如果有其他母语的开发者想扩展文档多语言,将会变得相对麻烦。虽然不知道引擎组是否支持开发者们参与文档多语言的扩展,但是对开发者来说,能使用母语来阅读文档,不仅能更好的理解文档内容,更能让开发者对技术的学习更感兴趣,Cocos 想要国际化,文档支持更多的语种应该是个不错的方向。(看了下 Godot 的文档就有多语言)

最开始接触到 VitePress 的时候,使用起来非常的丝滑,所以很快就联想到将 Cocos 文档移植到 VitePress 上来,效果看起来还是不错的,不过文档数量庞大,移植起来还是会消耗不少精力。

如果需要深度定制,VitePress 本身就是基于 Vue3 的工具,完全兼容 Vue3,理论上应该是能满足各种需求的。(不过移植起来肯定更要命)

总之还是希望文档能更美观,当然内容也是很重要的!

1赞

众什么所 周什么知 你直接说 哪个会所

是的,多语言如果要支持的话,整个文档系统要重写才行

我投敌了 :joy:,还是 VitePress 香,我的网站都是用 VitePress 搭建的

2赞

我们写了一个简单的脚本,做了自动化迁移。

虽然不是因为你的贴子才决定重构,不过还是感谢你的建议,我们是因为gitbook 有一些问题,不好修复,觉得不如弃坑,换个框架,才提上日程。

2赞

这盛世,如你所愿

2赞

抱歉,是我之前没有看到这篇贴子。感谢大家的支持。 楼主的PR我刚刚也看到了。 微信私聊我。我打算成立一个 PR 群。
所有给引擎和文档提交过PR的,都会在群里。

2赞