5

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

所以我的问题来了:有没有一种(简单的)方法可以在 OPA 中生成一组静态页面?

4

3 回答 3

5

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

我们有两个功能:

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

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

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

write = %%BslFile.of_string%%

一个小例子:

静态的.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 页面。

于 2011-12-13T20:53:30.153 回答
2

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

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

于 2011-12-23T19:30:03.153 回答
0

Thomas,我想您想使用 Opa 作为代码(而不是 JS),对吗?

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

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

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

更传统的方案是使用 Opa 的模板机制(接受 HTML 的大子集的标记)。

希望有帮助。

于 2011-12-13T17:09:45.293 回答