编译 ocaml 在 opam 库中找不到模块,Js.ml in js_from_ocaml

Compiling ocaml can't find module in opam library, Js.ml in js_from_ocaml

正在尝试将 ocaml 编译成 javascript。

我放在 https://gist.github.com/larsr/6b3cd6f62d54d56e3f9a 中的一些 OCaml 代码同时使用了 menhir 解析器和 js_of_ocaml 库。我用 opam.

安装了它们

代码来自http://toss.sourceforge.net/ocaml.html。 它是一个词法分析器和一个解析器以及一个调用它们的主程序。 目标是从 ocaml 代码生成一个 javascript 程序,并从网页中 运行 它。

我能够仅使用 menhir 和回购中 Makefile 中的 make 来编译第一个主程序,这

ocamlbuild -use-menhir -menhir "menhir --external-tokens Lexer" Main.native

我可以编译一个只使用 js_of_ocamlmake Formula.js 的程序

ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax \
      -syntax camlp4o -linkpkg -o Formula.byte Formula.ml
js_of_ocaml Formula.byte

我的问题是现在我无法使用 ocamlfind 构建 JsClient.js

make JsClient.js

所以我无法为 'JsClient.ml' 生成 javascript 代码。我得到的错误是编译器找不到 JsClient 使用的模块 Js。代码似乎在我主目录的 opam 库中,但我无法获得 ocamlfind 的正确参数来使用它。

如何将 JsClient.ml 编译成 JsClient.js

您用来编译 JsClient.ml 文件的规则不好。

JsClient.byte:
    ocamlbuild -use-menhir -menhir "menhir --external-tokens Lexer" 

如您所说,此文件使用模块 Js,因此您需要使用与文件 Formula.ml 相同的方式进行编译:

ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax \
      -syntax camlp4o -linkpkg -o JsClient.byte JsClient.ml
js_of_ocaml JSClient.byte