一个静态站点生成器的.NET移植版,GitHub星标数不到主项目的零头,却在发布0.2.0的24小时内收到17个PR。这个数字放在.NET开源圈,相当于一家社区便利店突然排起了海底捞的长队。
事情要从Jekyll的"身份危机"说起。这个用Ruby写的博客工具,过去15年养活了全球三分之一的程序员博客。但Ruby的安装环境劝退了多少Windows用户,GitHub Issues里"gem install报错"的帖子能翻47页。JekyllNet的作者——一个自称"受够了WSL"的.NET工程师——2024年底把项目扔上GitHub时,README就写了一句话:"让你爸的电脑也能跑Jekyll。"
0.1.0版本更像是个技术验证。能解析Markdown,能套Liquid模板,但主题系统完全没动。用户反馈最集中的问题是:我抄了Jekyll官方主题,为什么样式全崩?
答案藏在两个生态的缝隙里。Jekyll的主题依赖Ruby的插件体系,而.NET的NuGet包管理完全是另一套语法。0.2.0的更新清单里,主题兼容层被标为"实验性支持"——作者用了三个月,把Jekyll最常用的12个插件钩子翻译成.NET的中间件接口。不是1:1复刻,而是"能让Minimal Mistakes主题跑起来不报错"的最低限度兼容。
5项更新里,藏着3个"没写进CHANGELOG"的决策
官方Release Notes列了五条:主题兼容、增量构建、Docker镜像、CLI工具链、性能基准测试。但GitHub Discussion区的高赞回复,都在追问第六件事。
「Windows原生支持到底做不做?」
作者本人回复:「WSL2够用了,原生路径处理是地狱模式。」这条回复被点了83个踩。一位用户在跟帖里算了笔账:公司内网机器禁WSL,他每次改博客要开热点下Ubuntu镜像,流量费比云服务器还贵。
增量构建是0.2.0真正花功夫的地方。Jekyll的全量重建在千页站点上能卡到30秒,JekyllNet用.NET的System.IO.FileSystemWatcher做了文件级缓存,实测2000页站点冷启动8秒,热更新压到400毫秒。作者放出的基准测试图里,横轴是页面数,纵轴是构建时间,两条曲线的分叉点大概在800页左右。
Docker镜像的决策更有意思。官方推的是`ghcr.io/jekyllnet/jekyllnet:0.2.0`,但Dockerfile里留了一行注释:「# 如需Ruby插件回退,取消下行注释」。这行被注释掉的代码,装的是Jekyll的完整Ruby环境。作者在接受.NET Weekly邮件采访时说:「这是给迁移用户的逃生舱,但我赌90%的人用不上。」
CLI工具链的"减法"比"加法"更刺眼
0.2.0的CLI用了System.CommandLine,支持命令补全和结构化输出。但和Jekyll原版对比,少了`jekyll doctor`这个诊断命令。
作者的解释在Issue #89里:「doctor命令80%的代码在处理Ruby环境冲突,.NET没有这个问题。」底下有人反驳:「但我们需要诊断的是主题兼容性问题,不是环境。」这条Issue目前处于Open状态,标签是`help wanted`。
更隐蔽的变化是配置文件的优先级。Jekyll用`_config.yml`,JekyllNet 0.2.0同时支持`.json`和`.toml`,且后者优先级更高。这个改动没有写在迁移指南里,直到有用户在Discussion区贴出自己的踩坑记录:「我把Jekyll的配置直接复制过来,改了一下午才发现它根本没读。」
作者随后补了一篇Wiki,标题叫《从Jekyll迁移:你以为兼容,其实不兼容的7个细节》。
性能测试的"作弊"与诚实
0.2.0发布的性能数据里,有一项标注了「非公平对比」:JekyllNet启用了增量构建,Jekyll用的是默认全量模式。作者在原帖里加粗了这行说明,但转载到技术社区时,前半句往往被截掉了。
真正引发讨论的是内存占用。同样的2000页测试站点,Jekyll峰值内存1.2GB,JekyllNet压到180MB。有评论指出这是.NET的GC优势,也有人质疑测试用的Jekyll版本较旧。作者回复说欢迎复现,但「我手头没有Mac,M系列芯片的测试数据靠众筹」。
GitHub Sponsor页面因此多了三笔月付赞助,备注写的都是「买台Mac Mini」。
那个没写的功能,正在决定项目走向
0.2.0的Roadmap里,1.0版本的目标被描述为「生产可用」。但什么是"生产可用",作者和用户的理解显然有偏差。
企业用户想要的是GitHub Actions官方支持——目前 workflow 文件需要手写,且文档里的示例用的是Ubuntu Runner。个人博主更关心主题市场:Jekyll有官方主题库,JekyllNet的主题得自己去GitHub搜,搜出来还不一定兼容。
作者在最近一条Commit Message里写了句话:「0.3.0可能会让你失望,我在重写渲染管线。」这条Message下面,最高赞评论是:「失望没关系,别消失就行。」
JekyllNet的GitHub星标数目前是1,847。作为参照,它的"竞品"Statiq(另一个.NET静态站点生成器)是2,300星,但上一次Release是14个月前。这个对比本身,或许比任何功能更新都更能说明.NET开源生态的现状。
0.2.0发布一周后,Discussion区有人开帖问:「如果Jekyll官方突然出了.NET版,这个项目会死吗?」作者本人没有回复。但那条帖子的最后一条跟帖,是另一个用户贴的链接——Jekyll核心团队在2019年关闭的Issue,标题是「考虑用Crystal重写以提升性能」,状态至今仍是Open。
热门跟贴