使用 Dream eml 预处理器时未绑定模块

问题描述 投票:0回答:1

我正在尝试通过使用我发现的这个可爱的 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
文件以匹配库存储库中的示例

ocaml ocaml-dune
1个回答
1
投票

我怀疑您已在

implicit_transitive_deps
文件中禁用了
dune_project
。正如文档所述

然后,库或可执行文件直接使用的所有依赖项都必须添加到

libraries
字段中。

这意味着您必须将

dream-pure
添加到
libraries
文件中的
dune

似乎也可以通过在其

re_export
节中的
dream-pure
中添加
libraries
来修复它。

编辑:这是梦想中的一个错误,已在https://github.com/aantron/dream/commit/99388503ccd69272f596353f8d346f807858b40f

中修复
© www.soinside.com 2019 - 2024. All rights reserved.