Just静态blog编译引擎是我好几年前就一直在构思的作品,因为一直觉得我尼玛就为了写写文字,放放图就要学mysql、apache、nginx、linux、php、java、python、html、js、css,各种部署,各种架构,各种虚拟主机、VPS,尼玛就不觉得烦吗?!好不容易整好了还一会这出bug,那改bug的,不是个专业工程师还真做不了个独立博客。就算是使用网易、新浪的博客也一堆一堆的问题:
- 没网的情况下没法写作
- 在线编辑器繁琐不称心
- 传张图片等老慢了
- 想换个服务商,没法倒数据
- 各不相同、让人迷惑、操作繁复的后台操作体验
- ……
于是我便一直有一个“我要写一个超简约博客”的种子埋在了心里。这时候初步有了静态blog静态引擎的构思,因为我觉得,什么样的操作对于用户来说最直观、最熟悉,毫无疑问就是文件系统的操作。“创建文件夹”“新建文件”“复制”“粘贴”……这些操作是用户最最熟悉,最最直观的方式,基于文件系统的blog还有个先天优势,那就是数据就保存在本地,就在你的硬盘里,你一眼就能看到他,你可以随意复制粘贴,再也没有无法倒数据的烦恼,没有龟速上传图片的烦恼,没有不能离线操作的烦恼。从这个角度上讲,Just颇有些Git哲学的意味在里面(分布式、离线操作)。(^__^)
之前也有动手写过,最初使用php编写,记得写了两周甚至更长时间,代码思路改了好多稿,最后还是被好几个问题折腾疲乏了,影响了写下去的信心。其中之一便是php必须依赖php解释器,而无依赖一直以来就是我最看重的一个特性,可是当时我最熟悉的php给不了我这项特性。其次便是Just的构建思路不明确,写了两稿仍发现我的思路太过复杂,难以控制,写法难以理解,最后是一大堆Just尚未明确的各种特性的定型。也伤透了脑筋,因为我希望它足够简单,足够直观!
在这次放弃的几个月后,无意发现了一个应用,叫farBox,看到作者利用金山快盘一类的网盘产品的API,自动生成静态日志的神奇创意。一方面坚定了我把just写下去的信心,另一方面也我借鉴到了很多不错的特性、跟思路,之后还了解到了github的jekyll,于是乎我再次燃起了小宇宙。
为了满足:
- 无依赖
- 跨平台
- 性能强悍
这些条件,我决定学习一门新语言,那就是golang,目前为止,golang一直没有让我失望,绝对gelivable。这里要先感谢下《Go Web编程 交流群》里的各位高手大侠们的不吝赐教,尤其是**@谢大,@无闻、@小伟、@喻恒春、@膘叔、@slene、@lunny、@paul young这些帮助过我的人,还有google-nuts里的好多位热心帮助我的国际友人Kyle Lemons**。对了,其中还参考wendal大神的gor项目源码,在一周的熟悉后便开始了新的Just攻坚战。
接下来就是苦逼兮兮的两个月,从还没夏天开始,一直写到夏天快过去,中间出去嵊泗岛旅了个游,本想放松一把结果还急性肠胃炎了一回,发烧、关节痛、咳嗽至今,还有老婆老在我旁边看无聊综艺各种骚扰,还有谢大的鼓励催促作为支撑,此处省略10万字……
不管怎么说今天终于写完了,屁话讲了一大堆,目的有二,一方面是给大家讲述Just诞生的背景,可以加深大家对Just应用场景的理解,从而做出你更为理性的选择,另一方面是为了感谢下为我提供过帮助的人,祝你们一生幸福,再一方面是得瑟一下我有多么不容易o(∩_∩)o,装一下逼,还请见谅……
- 绿色免安装,无依赖,跨平台(暂时只在windows上先行测试发布,不久会发布linux/macOs版本)。
- 同时支持文章型日志,跟相册型日志。
- 文章型日志:支持单个md文件形式,附件支持方式灵活。
- 相册型日志:自动调节图片大小,支持自动读取相片备注信息。
- 灵活、便捷的主题帖包机制,主题制作、切换很随意。
- 命令具有向导式操作体验,几乎不用强行记住各个命令。
- 超方便的创建日志体验,预定位功能再次大大简化您的操作。
- 一键生成,并且只生成或改变有变动的部分,效率高。
- 以“规约”代“配置”,使得配置简洁、易上手。(Just整体构建思想都建立在此之上)
- 多站点支持
下载:just.zip,解压至你熟悉、或者习惯的目录
首次使用最好确认下您的站点根目录,因为以后你创建站点都会在这边,并且Just各项操作都是只针对这个路径之下的站点的。所以这个配置项很重要,并且是不得不配置的。默认的路径就是just所在的当前目录,您也可以不做修改采用默认值。下面是命令修改根目录的演示、及解释:(除了可以通过下面的方式修改之外也可以直接用任意文本编辑器打开just同目录下的data文件,修改sitesroot值即可)
- 查看当前的sitesroot:
- 命令:
just [-site <site_name>] sitesroot
- PS:命令中,[]包括的项是选填,若不填写,并且sitesroot路径下有多个站点,Just会采用向导模式引导你选择要操作的站点。首次调用该命令值应该为“.”,表示当前路径。
- 修改sitesroot:
- 命令:
just [-site <site_name>] sitesroot <sites_root_path>
- PS:跟上一条命令相比,多了一个<sites_root_path>项,把这个替换为你想要重新设置的路径即可,记得若改路径中有空格的话一定要把整个路径裹上双引号。
- 命令:
just newsite <site_name>
- PS:<site_name>即为你欲创建站点的名字(比如我的个人blog就 just newsite liqun.me);创建一个站点,这个命令要要输入使用两次,第一次执行这个命令,会提示您已经生成了一个配置样例文件,这时候你需要用任意编辑器打开这个配置文件进一步确认或调整。配置并不复杂,内容不多,而且都有样例,千万耐心。因为我思来想去这也是一个没法省略的步骤……
上面就是这份配置的样例文件,其中都有详尽的注释,大部分配置的含义大家应该一眼就能看明白。
#索引页每页的条目数
pageSize: 10
#Just采用开放式分类,即一篇日志可以同时隶属多个分类
#Just中有两个特殊分类:article、album,这两个分类名是内置的魔术分类名,他们是日志类型名,在Just中存在两种日志类型,即文章型(article),相册型(album)
#若填写album作为一个分类的话,所有相册型日志都将自动归为其中,即使MetaData中未填写
#Just中分类名还有一种特殊形式即about@http://www.baidu.com,这种分类名为一种外链分类,@之前是站内/导航中显示的分类名,后面是他的外链链接地址。
categorys: album|随记(other)|WEB(web)|嵌入式(embed)|about@http://www.baidu.com
#标签集
tags: js|arduino|php
#友情链接
links: 笑嘻嘻的博客 @ http://www.baidu.com | 哇哈哈的博客 @ http://log.sdf.com
#站点名称(例如:liqun.me)
site: liqun.me
#站点域名(例如:liqun.me)
domain: liqun.me
#作者
author: xlqstar
#Email
Email: [email protected]
#社交账号
#@之前是社交账号类型识别,目前约定有weibo、github、facebook、twitter
#这个标识用于某些模版中可以自动调用显示相应的社交账号链接
socials: weibo @ http://weibo.com/u/2867098822 | github @ https://github.com/xlqstar
当您配置完毕后,即可再次执行just newsite <site_name>
,操作无误的话,这回将在sitesroot下生成您的第一个站点啦!使用了Just的默认主题包,暂时还只有这一个主题包,不久我一定会加把劲,多制作些主题包。若您等不及的话您也可以加入进来一起制作主题包哦~
- 命令:
just [-site <site_name>] post [<log_type>] <title>
- PS:创建一篇文章型日志:
just post article "hello world"
或者just post "hello world"
,即省略日志类型(log_type)这个参数的话默认为article型。创建一片相册型日志的话:just post album "hello world"
。
- 命令:
just [-site <site_name>] delete [<title>]
- PS:注意这个命令最后一个参数title也是一个可选参数,意味着你可以不填这个参数,如果不填写的话,会进入向导模式,罗列出目前的日志清单,供您选择,当然也可以直接填写title删除相应的日志。
- 命令:
just [-site <site_name>] build
- PS:这是编译构建日志的命令,是使用最频繁的命令之一,通常在删除日志、更新日志、新建日志的之后都要使用。
- 命令:
just [-site <site_name>] rebuild
- PS:这个命令通常是在调整完模版、或者更换主题包之后自动调用,仅仅重新构建所有的HTML部分。
- 命令:
just [-site <site_name>] rebuildall
- PS:这个命令使用比较少,只有极个别的情况下,为了保持整个站点的清爽,避免冗余垃圾文件,彻底重新生成。
- 命令:
just [-site <site_name>] switchtheme [<theme_name>]
- PS:这个命令用于更换主题,最后的参数theme_name是指您想要更换成的主题名称,前提是当前just所在目录下的themes目录中存在该主题包。若不清楚有些什么主题包或者怕麻烦可以直接输入
just switchtheme
,剩下的由向导模式帮助您进行下一步操作。
- 命令:
just [-site <site_name>] resize
- PS:这个命令通常在更换主题后,原图片大小跟新主题不符合,风格脱离严重,则进行resize,实际上是删除所有相册型日志,重新生成。图多,或这图大,会导致resize进程缓慢,千万耐心等待一小会儿。
- 命令:
just [-site <site_name>] open
- PS:这个命令用于打开资源管理器并且定位至站点目录,方便一些手动操作。
- 命令:
just [-site <site_name>] preview
- PS:这需要我解释什么吗?
- 命令:
just -h
-
获取源码:
go get github.com/xlqstar/JustExpress
-
获取依赖:
markdown模块:go get github.com/xlqstar/blackfriday
图片resize模块:go get github.com/nfnt/resize
图片exif解析模块:go get github.com/rwcarlsen/goexif
字符串编码转换:go get github.com/axgle/mahonia
-
生成版本:
-
命令:
go build src\github.com\xlqstar\Just\main\just.go
, -
PS:
src\github.com\xlqstar\Just\main\
中除just.go本身之外,就是所有相关文件了,可以自行打包了。