使用StaGen来生成静态网站

标签: stagen 来生 网站 | 发表时间:2014-04-14 16:39 | 作者:
出处:http://it.deepinmind.com

译注:StaGen是一个功能极其简单的静态站点生成器,因此它非常容易上手,同时它还是用Java 8写的,有兴趣的话可以看下它的源代码。当然我个人还是比较喜欢 Jekyll

在没有 StaGen之前,我一直都在用RapidWeaver来管理我的网站 WizTools.org。RapidWeaver生成的文本格式真的让人很抓狂,这个软件浪费了我太多时间。StaGen的诞生解决了这些问题。我连夜完成了第一个版本。第二天就把我的网站WizTools.org给迁移到StatGen上面了。StaGen的设计目标就是希望能让只有少数几个页面的简单站点的开发和管理变得更容易一些。出于这个的考虑,我选择了markdown作为文档格式,StringTemplate作为内容模板,并使用JSON来存储配置信息。

目录结构

StaGen管理的网站项目需要遵循如下的目录结构:

   .
`-- content
|   |-- index.md
|   |-- other.md
`-- config
|   |-- other.json
|-- master.json
`-- static
|   |-- my.css
`-- template
|   |-- index.st
|   |-- other.st

各个文件夹的作用如下:

+content: 这个文件夹用来存储markdown格式的文档。生成的网站中会为每篇文章都单独生成一个HTML文件。content下面的子目录会被StaGen忽略。 +config: 每个页面都可以有一些单独的配置信息。配置信息是用JSON格式来存储的。文件名必须和content中的文件名匹配。 +master.json:这是主配置文件。里面存储了网站全局的配置信息。 +static: 网站中用到的静态资源文件,比如.js,.css以及图片等。 +template: StringTemplate 4模板会放在这个目录下。

StaGen是如何工作的

StaGen引擎处理的顺序是这样的:

  1. 加载主配置文件master.json
  2. 将静态资源文件拷贝到目标文件夹(网站生成的时候会自动创建一个叫target的文件夹)
  3. 对于content目录下的每一个markdown文件: 加载对应的配置信息(下节中会有介绍) 将配置信息应用到对应的模板上,并把结果的HTML文件输出到目标文件夹

加载配置

配置信息是一个JSON类型的map:

   {
"title": "My Site Title",
"activities": ["Dance", "Jump", "Shout"]
}

注意,key必须是字符串,值可以是任意类型的。

前面已经提到过,站点的全局配置是master.json。StaGen在一开始的时候便会加载这个配置文件。当处理到每一篇文章时(比如index.md),StaGen会尝试从config/index.json中加载对应的配置信息。它会覆盖掉主配置文件中的配置信息。也就是说,如果你已经在master.json和config/index.json中都定义了标题,当渲染index.md时,使用的是config/index.json里面的配置。如果config/index.json文件不存在,也无所谓——那就用master.json里面的配置好了。

模板渲染

StaGen使用的是StringTemplate作为模板。下面是一个简单的模板,它用到了前面提到的JSON配置信息:

   <html>
...
<title>$titleprebuffer_2lt;/title>
...
<ol>
$activities: {activity|
<li>$activityprebuffer_2lt;/li>
}$
</ol>
...
$_content$
...
</html>

$_content$就是markdown文件渲染出来的HTML。

模板渲染遵循如下的规则:

  1. 尝试按文章的名字加载模板,比如content.md,StaGen引擎会加载other.st。
  2. 如果没有指定专门的模板,则使用默认的index.st模板。因此你要确保你的项目中确实有一个index.st模板。

模板内嵌套模板

你可以在.st文件里再包含一个别的模板,比如你有一个ga.st(ga->Google Analytics)文件,要引入到主模板文件index.st中。在index.st里面你可以这么写:

   $ga()$

index.st里面会包含ga.st渲染后的内容。需要注意的是,index.st中的所有变量对引入的模板都是可见的。

StaGen的使用

StaGen是以一个jar包的形式发布的。想获取这个工具的帮助信息的话:

   java -jar ~/stagen-VER-full.jar -h

从项目里生成站点:

   java -jar ~/stagen-VER-full.jar gen

上述命令将会在target目录中生成一个静态网站。

想清除target目录的话:

   java -jar ~/stagen-VER-full.jar clean

如果你刚开始用StaGen,想创建一个新的项目结构:

   java -jar ~/stagen-VER-full.jar init

总结

StaGen故意设计得非常简单。我自己不会用它来管理太复杂的站点。它不像别的静态网站生成器那样能支持博客或者主题。我相信,StaGen不支持这些特性,这也正是它的过人之处。

原创文章转载请注明出处: 使用StaGen来生成静态网站

英文原文链接

相关 [stagen 来生 网站] 推荐:

使用StaGen来生成静态网站

- - Java译站
译注:StaGen是一个功能极其简单的静态站点生成器,因此它非常容易上手,同时它还是用Java 8写的,有兴趣的话可以看下它的源代码. 当然我个人还是比较喜欢 Jekyll. 在没有 StaGen之前,我一直都在用RapidWeaver来管理我的网站 WizTools.org. RapidWeaver生成的文本格式真的让人很抓狂,这个软件浪费了我太多时间.

网站推荐:IFTTT(if this then that)

- 小皮球香蕉梨 - 有意思吧
这是一个神奇的网站,比某电视上天天放的那个广告要神奇许多. 就像它的域名 ifttt.com 一样,虽然丑却十分个性. 昨天晚上,ifttt.com 在 Twitter 被瞬间引爆,每个被邀请的人都会再拥有5个邀请名额,源源不断的邀请让 Geek 很兴奋. 那么,ifttt 到底是什么呢. 这是一个条件触发网站,当 A 条件触发时,自动激发 B 条件发生.

Facebook 网站架构

- - idea's blog
我收集到一些文章和视频, 可以带你窥探 Facebook 的架构. Facebook 承载了几十亿的用户, 它的架构(包括思想和实现)是非常值得参考的. 当然, 你要小心不要照搬 Facebook 的每一字一句, 因为任何思想和实现都是有自己的应用场景的.. Google Talk 界面开发分析. 使用Python POST任意的HTTP数据以及使用Cookie.

技术流:未来生活

- ♂神→双子← - 有意思吧
公元3000年,我们的生活会是怎样的. 如果科技足够发达,我想未来,生活至少应该是这个样子的……. 也许,未来的城市,生活真的应该这样设计. 这个是微软的广告,未来远景设计. 动态仿真窗户:动态仿真窗+自然空气系统,可以让地下室变成空中楼阁. 高科技神奇魔镜Cybertecture Mirror. 由RFID技术研制而成的新式卡带播放器.

用BrowserID注册网站

- ashuai - Solidot
Mozilla宣布了一个实验项目BrowserID,提供了一种注册网站的新方法. 注册网站通常的方法是电子邮件验证,造成用户时间的浪费,要求用户登录另一个网站,记住另一个密码. BrowserID(源代码发布在github上)提供了一种更简单的方法,消除了电子邮件验证. 它是Verified Email Protocol实现,基于公钥系统和Mozilla的认证服务器,以确保用户身份的真实性.

ifttt、GGG与网站图谱

- babyone - cnBeta全文版
尽管伯纳斯・李(Tim Berners-Lee)在发明WWW之初,心中就有一个GGG(Giant Global Graph)的宏大梦想,但是直到Google的网页图谱、尤其是Facebook的社交图谱、Twitter的兴趣图谱之后,人们才真正意识到图谱的网络效应魔力. 不过这仍然未及伯纳斯・李的预期,他理想中的GGG是一张数据的图谱、服务的图谱,而不仅仅是网页、人或兴趣.

苹果网站的特点

- fei - 所有文章 - UCD大社区
以前听同行讲过一次apple.com,在他眼里apple.com就是丰碑,基本没有不好. 任何哲学的理论和术语都可以往它身上套,简直就是成就与完美的化身. 这问题我觉得需要拆解分层次的看,任何有特点的设计必然有其优势,也有其局限性. 我认为讲apple.com很有特点可能更合适,因为“特点”只是个中性词.

中国的大网站

- yangzhe - Jarain
//别的搜索引擎把不能搜的挑出来屏蔽,百度把能搜的挑出来让大家搜. //以Twitter为指导思想,以饭否和叽歪的关站为经验教训,以稳定压倒一切为基本原则的具有中国特色的社会主义微博. //什么博客什么校友录什么白社会什么搜狐微博都是浮云. //中国只有两个有态度的网络媒体,一个是人民网,一个是网易.

苹果网站的特点

- 图腾 - 千鳥志
以前听同行讲过一次apple.com,在他眼里apple.com就是丰碑,基本没有不好. 任何哲学的理论和术语都可以往它身上套,简直就是成就与完美的化身. 这问题我觉得需要拆解分层次的看,任何有特.

50个黄色网站

- 小汐 - 帕兰映像
一个好的黄色网站的重点并不是够不够黄,也不一定要黄色电影、黄色视频、黄色图片和黄色小说一应俱全,而是要黄的有质感有层次,欣赏起来要赏心悦目. 在浩瀚的互联网宇宙中,有无数的黄色网站. 有的你可能已经深入接触,有的你可能从未体验. 本文里面,帕兰将向你推荐50个来自不同国家的优质的黄色网站,请准备好大饱眼福.