在OPA中生成静态页面

时间:2011-12-13 13:31:02

标签: opa

在我的一个项目中,我必须编写HTML& JavaScript代码。我宁愿使用静态类型的语言,所以我正在评估OPA。但是,我的目标是生成静态页面的集合,所以我不关心OPA HTTP服务器和持久层。

所以我的问题就出现了:是否有一种(简单的)方法在OPA中生成静态页面集合?

3 个答案:

答案 0 :(得分:5)

如果我理解正确,你想用Opa构建xhtml,但不是服务,而是将其打印到文件中?

我们有两个功能:

这两个函数之间的区别在于第一个函数不会生成关联的opa js代码。

然后,您可以将结果字符串写入磁盘上的HTML文件。

请注意,我们没有提供任何方法来在stdlib中的磁盘中写入文件。 您必须使用bsl系统:

write = %%BslFile.of_string%%

一个小例子:

<强> static.opa

write = %%BslFile.of_string%%

xhtml_page(num:int) =
  <p>Page {num}</p>

pages = [1, 2, 3, 4, 5]

do List.iter(i ->
  xhtml_content = xhtml_page(i)
  string_content = Xhtml.serialize_as_standalone_html(xhtml_content)
  write("{i}.html", string_content)
, pages)

编译并运行:opa static.opa --

这将生成5个html页面。

答案 1 :(得分:2)

您可以使用Xhtml.precompiled。它需要一个xhtml值并返回一个预编译的xhtml(内部已经扁平化为字符串)。

当网页的一部分是静态的而其余部分是动态的时,它很有用。 您可以避免为静态部分支付一些费用(序列化,内存......)。

答案 2 :(得分:0)

托马斯,我想你想用Opa代替代码(而不是JS),对吗?

只有一堆静态页面不是该语言的典型用法,但你可以轻松地做到这一点:

Server.start(Server.http, { resources: @static_resource_directory("resources") })

以上是一个完整的Opa程序(S4 style),它只是静态地提供资源目录的内容(包括HTML)。

更常规的情况是使用Opa的模板机制(接受HTML的一个重要子集的标记)。

希望有所帮助。