(此文章同时发表在本人微信公众号“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

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

  1. hugo-最好用的静态网站生成器

    hugo最好用的静态网站生成器 Hugo是由Go语言实现的静态网站生成器.简单.易用.高效.易扩展.快速部署. 快速开始 安装Hugo 1. 二进制安装(推荐:简单.快速) 到 Hugo Releas ...

  2. vuejs服务端渲染更好的SEO,SSR完全指南Nuxt.js静态站生成器

    vuejs服务端渲染更好的SEO,SSR完全指南Nuxt.js静态站生成器SSR 完全指南https://cn.vuejs.org/v2/guide/ssr.html在 2.3 发布后我们发布了一份完 ...

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

    一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不 ...

  4. express-21 静态内容

    静态内容是指应用程序不会基于每个请求而去改变的资源. 多媒体: 图片.视频和音频文件 CSS: JavaScript 二进制下载文件: 这包含所有种类:PDF.压缩文件.安装文件等类似的东西. 借助一 ...

  5. Nginx作为静态内容服务器(Windows环境)

    1.简单安装 1)下载 http://nginx.org/en/download.html 2)解压后的路径 E:\Study\nginx\nginx-1.7.6 3)执行nginx.exe,访问ht ...

  6. css中内容生成器

    一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不 ...

  7. css内容生成器

    一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不 ...

  8. nginx 提供静态内容

    Serving Static Content 提供静态内容 原文地址:http://nginx.com/resources/admin-guide/serving-static-content/ Th ...

  9. django无法加载admin的静态内容的问题(Centos7+Nginx+uwsgi环境下)

    Nginx静态资源无法加载,导致admin没有CSS样式: 这个问题,主要是要理解: 1.Django不会去解析静态内容(css,js,img)等,而是交给Nginx去处理,所以nginx.conf要 ...

随机推荐

  1. 【MySQL】MySQL 如何实现 唯一随机数ID

    如果不是 UUID 好像比较困难 参考资料: http://bbs.csdn.net/topics/390001507 https://www.zhihu.com/question/20151242

  2. Appium+Robotframework实现Android应用的自动化测试-5:RIDE中AppiumLibrary的配置

    可能很多朋友已经迫不及待的想要用RobotFramework+AppiumLibrary来写Android App的测试脚本了,那我们也废话少说,直接开始. 首先打开RIDE,这是编写RobotFra ...

  3. 5.nodejs权威指南--HTTP

    1. HTTP 1.1 服务器 var http = require('http'); var server = http.createServer(function(req,rsp){ req.on ...

  4. MySQL主从复制数据不一致问题【自增主键】

    前言: 今天遇到主从表不一致的情况,很奇怪为什么会出现不一致的情况,因为复制状态一直都是正常的.最后检查出现不一致的数据都是主键,原来是当时初始化数据的时候导致的.现在分析记录下这个问题,避免以后再遇 ...

  5. effective OC2.0 52阅读笔记(二 对象、消息、运行期)

    第二章:对象.消息.运行期 6 理解属性这一概念 总结:OC解决硬编码偏移量问题的做法,一种方案是把实例变量当做一种存储偏移量所用的特殊变量,交由类对象保管,偏移量会在运行期查找,叫做稳固的“应用程序 ...

  6. AJAX学习

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX代码运行在客户端,其和服务器进行交互 ...

  7. Mac shell 添加VPN 路由

    苦于每次使用内网VPN,都需要手动添加route来设置网络的映射,才可以正常使用VPN. 每次都需要自动添加,当然就是觉得很烦,想到Mac的shell.反正每次添加的时候都是在终端执行添加路由.为了方 ...

  8. event.srcElement 用法笔记e.target

    event.srcElement 可以捕获当前事件作用的对象,如event.srcElement.tagName可以捕获活动标记名称. 注意获取的标记都以大写表示,如"TD",&q ...

  9. 【opencv】轮廓相关

    IplImage* contours_rect; IplImage* contours; CvMemStorage* countours_storage=NULL; if(contours_rect= ...

  10. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中

    一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...