用Publish创建博客(一)—— 入门
本系列一共三篇文章。如想获得更好的阅读效果可以访问我的博客 www.fatbobman.com[1] 我的博客也是用Publish创建的。
Publish[2]是一款专门为Swift开发者打造的静态网站生成器。它使用Swift构建整个网站,并支持主题、插件和其他大量的定制选项。作为Swift开发者,通过Publish创建站点的开发过程和体验同开发其他程序很类似。
开篇
开发者John Sundell
Publish的开发者John Sundell这些年一直致力于发表关于Swift的高质量文章、播客和视频。他的作品大多都发布在其独立运营的 Swift by Sundell[3]上。他开发了Publish[4]用以创建并管理自己的站点。
在开发Publish的过程中,他还开源了其他大量的基本库,比如Ink[5](高效的Markdown解析器)、Plot[6](创建HTML、XML、RSS的DSL)、Sweep[7](高效的字符串扫描库)、Codextended[8](Codable增强)等。它们不仅一起构建了强大的Publish,并且在各自的领域也是极为出色的开源库。
我为什么使用Publish
我在一年前恢复自己的个人博客[9]时使用的是Hexo
。Hexo在国内有非常好的群众基础,网上有大量优秀的教程,也有非常多的开发者贡献了自己创作的各种主题和插件。尽管Hexo让我相当满意,但由于我主要使用的语言是Swift,且对JavaScript非常不熟悉,因此想要对Hexo做更深入的定制或修改很困难。
作为开发者(即使是业余的),总希望对自己的项目有更全面的掌控,因此完全由Swift开发的Publish就成为了我的首选。
随着使用Publish对肘子的Swift记事本[10]重建过程的深入,我感觉自己做出了正确的选择。Publish让我可以用开发普通app的思路和逻辑来创建站点,高效地完成我想要的各种定制和改动。
写本文的原因
截至落笔时,Publish已经在Github上获得了3.1K
的好评。但网络上对Publish的介绍并不多,尤其欠缺关于主题定制、插件开发方面的资料和交流。在Github上搜索相关的插件和主题的结果数量也非常有限。
造成上述的情况固然有Publish诞生时间较短、使用量不大,Swift圈子较小等原因,但我认为下面的情况也加剧了这一局面的形成:由于不同于其他的静态网站生成器,在Publish项目中,开发者可以用短小的代码实现各种功能。这种碎片化的代码其实是不利于分享且并不容易被搜索;另外,由于Publish中的主题和网站的功能具体实现绑定的较深,单独分享的主题的利用度也较低。
但Publish的这种特质也恰恰是其吸引人之处。
有鉴于此,我将用三篇文章(入门、主题开发、插件开发)完成对Publish的简绍,也希望国内的Swift开发者或爱好者们可以更多的了解和使用这个优秀的工具。
为了让大家能够快速上手,我已将肘子的Swift记事本[11]站点所用的代码(包括主题、自定义插件等)放置在Github[12]上,方便大家通过代码更快的了解和掌握Publish。
快速使用入门
如何安装Publish
同大量的其他静态网站生成器一样,Publish提供了CLI。你可以通过命令行快速的完成创建模板、内容更新、远程发布等一系列操作。Publish目前可以运行在Mac和Linux上,由于其代码对操作系统的依存度极低,估计其后也出现在Windows平台上。
Mac下通过brew安装
代码语言:javascript复制$brew install publish
源代码安装
代码语言:javascript复制$git clone https://github.com/JohnSundell/Publish.git$cd Publish$make
创建你的第一个项目
让我们来创建一个新的Blog项目
代码语言:javascript复制$mkdir myblog$cd myblog$publish new
Publish将在myblog目录中创建我们所需的项目模板。它的基本构成大概如下:
代码语言:javascript复制|-- myblog| |-- Content| |–– posts| |–– first-post.md| |–– index.md| |–– index.md| |-- Resources| |-- Sources| |–– Myblog| |–– main.swift
•Content在此放入你要在网站发布的文章、页面等使用markdown编写的文件。•Resources项目主题需要的一些资源,比如css,图片等,目前为空。在你进行第一发布后,可以看到它包含了默认的FoundationTheme的styles.css文件。•Source描述网站的代码。在main.swift
中定义了网站的基本属性、创建工作流等。
编译及运行
Swift是编译型语言,因此你的站点的代码在每次修改之后,都需在本机编译并运行才能完成内容的生成工作,好在这一切都只需要一条命令。
我们让Publish完成上述工作并启动内置的Web Server供我们浏览新创建的项目。
代码语言:javascript复制$publish run
第一次运行,Publish会自动从Github上获取所需的其他库,请稍等几分钟。
代码语言:javascript复制$publish run............Publishing Myblog (6 steps)[1/6] Copy 'Resources' files[2/6] Add Markdown files from 'Content' folder[3/6] Sort items[4/6] Generate HTML[5/6] Generate RSS feed[6/6] Generate site map✅ Successfully published Myblog