为什么叫 Snow
没啥特别的意义,源于自然风景,天气的名称,像 rain ,thunder ,feng 。。。都是好名称
快速开始
首先下载二进制文件到本地, 然后执行初始化
└──╼ ./snow init mysnow
Welcome to snow 0.1.0.
> Where do you want to create your new web site? [mysnow]
> What will be the title of this web site? [snow]
> Who will be the author of this web site? [snow]
> What is your URL prefix? (no trailing slash) [http://127.0.0.1:8000]
> Do you want to create first page? [Y/n]
这时会生成一个 mysnow 的目录, 进入该目录,然后执行 snow server 就可以访问 http://127.0.0.1:8000/posts/index.html 查看第一篇文章了
└──╼ cd mysnow
└──╼ ./../snow server
INFO Done: Static Processed 0 static files in 39.691µs
INFO Done: Page Processed 1 normal pages in 12.218357ms
INFO Done: Section Processed 1 posts in 12.327303ms
INFO Done: Taxonomy Processed 1 authors, 1 categories, 3 tags in 12.33494ms
INFO Listen http://127.0.0.1:8000 ...
为什么不用 Hugo
- 不太喜欢
Hugo使用的主题模版,虽然它很快,Snow采用的是类 Django 的 Pongo2 - hugo 缺少可扩展性, 当然这是
Go的问题,不是Hugo的问题,很早之前就想从Pelican迁移到Hugo,但有一个加密功能一直没法实现, 有第三方插件都是需要先生成 html ,再调用第三方工具来进行加密, 原本想直接改一下 Hugo 的源码自己编译一个二进制来支持, 但后来只能说声打扰了 - 就想造个轮子,自己使用自己写的生成器还是很有成就感的 /😊
有哪些特色功能
-
支持 orgmode:hugo 也支持,但 snow 用的解析库是我自己写的org-golang,功能少,但对于只把 orgmode 作为标记语言来使用已经足够了
-
shortcode: 有点像 hugo 的 shortcode ,但支持对渲染后的 HTML 进行修改,比如我有一系列的图片需要添加 fancybox ,传统方式一是自定义 markdown 渲染函数,二是使用 JS 进行处理,而在 Snow 中只需要创建一个
shortcodes/img.html{%- set show = attr.src %} {%- set thumb = attr.src + "-thumb" %} <a href="{{ show }}" data-fancybox="image"> <img data-src="{{ thumb }}" class="lazyload" /> </a>就可以直接生成带
data-fancybox的标签 -
hooks: 虽然很鸡肋,如果要添加插件就得重新编译二进制,但有总比没有的好,有需要的人也可以自己写插件然后单独编译,现在的 shortcode, i18n 等功能都是基于 hooks 实现的, 像是 pelican 的 hook 可以让我不需要修改原来的
.md或者.org文件就能直接使用Snow, 关于Go插件如果有其它想法的可以告诉我 -
build file: 直接命令行筛选文章,不仅仅是草稿, 比如直接隐藏所有 tag 为
life的文章snow server -F 'not ("life" in tags)'
当然,Snow 本身是基于我之前使用 Pelican 的需求,比如 orgmode 的支持,文章加密, 子分类等, 没有太多复杂的功能,如果需要更复杂的功能还是推荐 Hugo,毕竟用的人多,主题也多
如果之前使用的是 Pelican,又对 Snow 感兴趣的可以参考我写的《博客系统从 Pelican 迁移至 Snow 》