我正在尝试通过使用我发现的这个可爱的 Dream 库(https://aantron.github.io/dream/)构建一个网站来学习 OCaml,但在尝试时遇到了问题使用模板预处理器!我的代码 是直接从库的 github 页面的
7-template
示例复制的,一切似乎都正常,直到我运行 dune build
。预处理器 dream_eml
将带有 jsx
样式 html 标记的模板化代码转换为不太漂亮但更易于编译的 OCaml 代码,但是当它这样做时,它会插入对模块 Dream_pure
的引用,我的编译器会说Dream_pure
是一个未绑定的模块!您可以在下面找到预处理的代码以及我的 dune
文件!
沙丘文件:
(executable
(name jenr_dev_server)
(libraries base core dream)
(preprocess (pps lwt_ppx)))
(rule
(targets jenr_dev_server.ml)
(deps jenr_dev_server.eml.ml)
(action (run dream_eml %{workspace_root}/src/server/%{deps})))
扩展代码:
#1 "./src/server/jenr_dev_server.eml.ml"
let render param =
let ___eml_buffer = Buffer.create 4096 in
(Buffer.add_string ___eml_buffer "<html>\n<body>\n <h1>The URL parameter was ");
(Printf.bprintf ___eml_buffer "%s" (Dream_pure.Formats.html_escape (
#4 "./src/server/jenr_dev_server.eml.ml"
param
)));
(Buffer.add_string ___eml_buffer "!</h1>\n</body>\n</html>\n\n");
(Buffer.contents ___eml_buffer)
#8 "./src/server/jenr_dev_server.eml.ml"
let () =
Dream.run
@@ Dream.logger
@@ Dream.router [
Dream.get "/:word"
(fun request ->
Dream.param request "word"
|> render
|> Dream.html);
]
错误信息
File "../../src/server/jenr_dev_server.eml.ml", line 4, characters 36-66:
Error: Unbound module Dream_pure
我尝试使用
opam
在我的 opam install dream
交换机上重新安装库,并重新配置 dune
文件以匹配库存储库中的示例
我怀疑您已在
implicit_transitive_deps
文件中禁用了 dune_project
。正如文档所述:
然后,库或可执行文件直接使用的所有依赖项都必须添加到
字段中。libraries
这意味着您必须将
dream-pure
添加到 libraries
文件中的 dune
。
似乎也可以通过在其
re_export
节中的dream-pure
中添加libraries
来修复它。
编辑:这是梦想中的一个错误,已在https://github.com/aantron/dream/commit/99388503ccd69272f596353f8d346f807858b40f
中修复