静态内容生成器——Wyam

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:今天继续静态网站的话题,介绍我选用的一个使用.NET开发的静态内容生成器——Wyam。

技术选型

在决定开始搞静态网站之后,面临的第一个问题就是如何生成静态内容。有现成工具吗?这样的工具符合近期和远期要求吗?如果不符合,有什么技术思路自己开发吗?

带着这样的问题,我迅速Bing到了https://www.staticgen.com/这个网站,这个网站汇聚了市面上存在的几乎所有开源静态网站生成器。

不出所料,排名第一的是Jekyll,其GitHub上的Star高达22822。Jekyll虽然最流行,不过其主要用于Blog站点生成,我目前主要面向企业CMS,更为重要的是它是Ruby编写的,这个不是我最熟悉的开发平台。

不过StaticGen贴心的给出了语言过滤选项,在.NET语言下,仅出现了pretzelWyamgrazeMisakai Baker四个工具。虽然pretzel使用了和Jekyll一样的Liquid模板引擎,适应性可能更广,但是在对这4个工具初步研究后,基本选定了Wyam。他基本可以满足我对静态内容生成器的技术要求:

  • 基于熟悉的语言和平台开发,架构设计考虑了扩展性。这样方便我可以根据需要自行扩展。
  • 使用熟悉和相对使用广泛的模板语言和引擎。方便我制作网站模板(内容输入),并对其他人进行培训。
  • 能够方便的注入元数据。因为CMS可能需要注入更多更复杂的数据。
  • 可以嵌入运行。很多生成器都是命令行工具,但是我可能需要让生成器在后台运行。

Wyam的介绍

Waym.io官网上的自我介绍基本上把Wyam是什么说的很清楚了,我就简单在这里翻译一下。

Wyam是与众不同的。它不是Jekyll的克隆(并不代表Jekyll有任何问题),它不是设计来生成博客的(虽然也能很好的胜任此任务)。Waym是一个静态内容生成器,可以用于生成网站、文档、电子书和其他更多的内容。由于它的所有东西都是通过很多灵活的模块(你也可以编写自己的模块)串在一起,所以唯一的限制是你的想象力。

在它的特性当中,尤其让我看中的是:

  • 配置文件使用C#脚本写就,这完全是得益于Roslyn的强大
  • 简单直接的元数据使用方式
  • 支持多种模板引擎和语言,尤其直接内置Razor的支持(且Razor的支持是基于ASP.NET MVC 6的源代码的,未来会支持TagHelper) 。当然也有Markdown支持或者扩展自己的模板语言支持。
  • 集成Web Server方便在编写模板的时候进行预览
  • 完全支持Nuget,可以在执行生成的过程中,自动下载依赖的Nuget包
  • 更为重要的,它支持嵌入运行
  • 相对完整清晰的文档

Waym其实借鉴了现有其他静态内容生成器的优点和设计,比如FrontMatter的支持(通过Yaml实现)。虽然它目前还只是0.11,但是功能完成度还是比较高了,并且你也可以直接pull request参与贡献。源代码地址是:https://github.com/Wyamio/Wyam

Wyam的使用

Wyam的用法很简单,直接通过命令行执行,如下所示:

c:\MySite>Wyam.exe --preview --watch
	Loading configuration from c:\MySite\config.wyam.
	Cleaning output directory c:\MySite\.\Output...
	Cleaned output directory.
	Executing 3 pipelines...
	    Executing pipeline "Markdown" (1/3) with 5 child module(s)...
	    Executed pipeline "Markdown" (1/3) resulting in 0 output document(s).
	    Executing pipeline "Razor" (2/3) with 4 child module(s)...
	    Executed pipeline "Razor" (2/3) resulting in 2 output document(s).
	    Executing pipeline "Resources" (3/3) with 1 child module(s)...
	    Executed pipeline "Resources" (3/3) resulting in 21 output document(s).
	Executed 3 pipelines.
	Preview server running on port 5080...
	Watching folder c:\MySite\.\Input...
	Hit any key to exit...
	

Wyam的源代码中有个Examples的文件夹,里面有一些例子可以参考。其实,Wyam.io这个网站本身就是用Wyam来生成的,且也有源代码,所以也是一个很好的参考。当然我也做了一个简单的示例,可以通过这里下载:https://zyg.blob.core.windows.net/test/SampleTemplate.zip

时间: 2024-12-23 22:27:24

静态内容生成器——Wyam的相关文章

开源之静态站点生成器排行榜

摘要:本文是从StaticGen网站整理出来的静态站点生成器排行榜.俗话说,不管白猫黑猫,抓到老鼠就是好猫,所以这里整理出来的生成器不分先后,只要是合适的就是最好的.这其中包括Jekyll.Pelican.Middleman等等. 本文是从StaticGen网站整理出来的静态站点生成器排行榜.俗话说,不管白猫黑猫,抓到老鼠就是好猫,所以这里整理出来的生成器不分先后,只要是合适的就是最好的. 1. Jekyll   主页|托管地址 Jekyll是一个静态Blog站点生成器,不管是用在个人.项目还是

搭建博客、自己的小窝?快来看看这些开源静态网站生成器

作者:HelloGitHub-ChungZH 相信很多人都想要搭建一个自己的博客或是给项目做文档网站.本文将要推荐的静态网站生成器(Static Site Generator, SSG),它做的事情就是把你的文档.内容(通常为 Markdown 文件)生成可发布成网站(html)的工具,这样你就可以专心创作,同时也有了一块自己发表自己想法的网站.然后 GitHub.Gitee 等均支持免费 Page 服务,通过简单的配置 SSG 就可以实现一条命令发布,有一个自己小窝就是这么简单和方便- 下面就

css中内容生成器

一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不会有after?): content的作用: 1,作用:在被选元素的内容前面插入内容: 2,用法:使用content属性指定要插入的内容: 3,可以设置插入内容的样式: content的使用作用:对HTML内容修饰: 常用的值:url:添加图像: 文本: 计数器:? 二,计数器:(引导语,大家之前如

云计算设计模式(二十二)——静态内容托管模式

部署静态内容到一个基于云的存储服务,可以直接向客户提供这些.这个模式可以减少潜在的昂贵的计算实例的需求. 景和问题 Web应用程序通常包括静态内容的一些元素.此静态内容可以包括HTML页面和诸如图像和可用到客户端的文件的其他资源,无论是作为一个HTML页的一部分(如嵌入式图像,样式表和客户端JavaScript文件)或作为单独的下载(如PDF文档). 尽管Web服务器以及调整通过有效的动态执行页代码和输出缓存优化的要求,他们仍然必须处理请求下载静态内容.这种吸收,可以经常得到更好的利用处理周期.

最全的静态网站生成器(开源项目)

将动态网页静态化,可以有效减轻服务器端的压力,并且静态网页的访问速度要快于动态网页.此外,使用静态网页还有利于搜索引擎的收录,从而提高网站的搜索排名. 下面是StaticSiteGenerators网站收集整理的开源的静态网站生成器,按照编程语言进行分类,每个分类按照Star数进行排序. (关注ITeye官微,随时随地查看最新开发资讯.技术文章.) 目 录 [ - ] JavaScript 版 Ruby 版 Java/Groovy/Scala 版 PHP 版本 Python 版 Go 语言版 P

用ArrayAdapter来创建Spinner(自定义布局、默认布局、动态内容、静态内容)

         android:dropDownWidth 下拉列表宽度 android:dropDownHorizontalOffset 下拉列表距离左边的距离 android:dropDownVerticalOffset     下拉菜单和文本之间的垂直偏移量 android:popupBackground   下拉列表中的背景色 android:prompt 下拉列表中的提示信息(基本没用了) MainActivity.java package com.kale.spinner; imp

自己搭建CDN服务器静态内容加速-LuManager CDN使用教程

为什么要自己来搭建一个CDN服务器实现网站访问加速?一是免费CDN服务稳定性和加速效果都不怎么行:二是用国内的付费CDN服务价格贵得要死,一般的草根站长无法承受:三是最现实的问题国内的CDN要求域名Be案. 有了Be案的域名自然是选择国内的主机,没有Be案的域名都是使用的美国主机,国内访问美国空间的速度有时会不理想,且始终比不上国内机房的访问速度,相对于美国空间,日本.香港等地的机房在国内访问速度非常快. 于是很多人都喜欢将自己的网站放在日本或者香港机房,就连CDN服务,我们都会希望找到有日本或

内容生成器

一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不会有after?): content的作用: 1,作用:在被选元素的内容前面插入内容: 2,用法:使用content属性指定要插入的内容: 3,可以设置插入内容的样式: content的使用作用:对HTML内容修饰: 常用的值:url:添加图像: 文本: 计数器:? 二,计数器:(引导语,大家之前如

内容生成器:content、计数器、多列

一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不会有after?): content的作用: 1,作用:在被选元素的内容前面插入内容: 2,用法:使用content属性指定要插入的内容: 3,可以设置插入内容的样式: content的使用作用:对HTML内容修饰: 常用的值:url:添加图像: 文本: 计数器:? 二,计数器:(引导语,大家之前如