V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
honmaple
V2EX  ›  分享创造

又造了一个新轮子——Snow 静态博客生成器

  •  
  •   honmaple · 2023-03-08 18:45:58 +08:00 · 1311 次点击
    这是一个创建于 386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么叫 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: 虽然很鸡肋,如果要添加插件就得重新编译二进制,但有总比没有的好,有需要的人也可以自己写插件然后单独编译,现在的 shortcodei18n 等功能都是基于 hooks 实现的, 像是 pelican 的 hook 可以让我不需要修改原来的 .md 或者 .org 文件就能直接使用 Snow, 关于 Go 插件如果有其它想法的可以告诉我

    • build file: 直接命令行筛选文章,不仅仅是草稿, 比如直接隐藏所有 taglife 的文章

      snow server -F 'not ("life" in tags)'
      

    当然,Snow 本身是基于我之前使用 Pelican 的需求,比如 orgmode 的支持,文章加密, 子分类等, 没有太多复杂的功能,如果需要更复杂的功能还是推荐 Hugo,毕竟用的人多,主题也多

    如果之前使用的是 Pelican,又对 Snow 感兴趣的可以参考我写的《博客系统从 Pelican 迁移至 Snow 》

    开源地址: https://github.com/honmaple/snow

    3 条回复    2023-03-08 20:03:22 +08:00
    kele999
        1
    kele999  
       2023-03-08 19:28:36 +08:00   ❤️ 1
    此类名称,除非特别出名了,比如 apple ,搜索引擎排不上号,导致传播成本很高。
    honmaple
        2
    honmaple  
    OP
       2023-03-08 19:58:09 +08:00
    @kele999 还好吧,开始也没想着能直接通过搜索 snow 就找到,如果感兴趣的人肯定会加上其它关键字,虽然确实没有 hugo ,pelican 之类的容易搜索,但 snow 也确实好听呀
    kele999
        3
    kele999  
       2023-03-08 20:03:22 +08:00
    @honmaple 我就说说而已,问题不大,大家知道这个点就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   956 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:36 · PVG 04:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.