未实现的Javascript原语caml_pure_js_expr

时间:2016-05-19 10:29:17

标签: ocaml js-of-ocaml ocsigen

我想编写和编译cubes.ml,以便1)它包装一个OCaml函数来创建一个可以在web中调用的JS函数; 2)OCaml函数和字节码仍然可以在Linux下的命令行中进行测试。

cubes.ml如下:

let () =
  let oneArgument (a: int) = a + 100 in
  Js.Unsafe.global##.jsOneArgument := Js.wrap_callback oneArgument;
  print_string "hello\n";
  exit 0

以下2个命令生成字节码T,并将T转换为cubes.js

ocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T

js_of_ocaml T -o cubes.js

我已经测试过jsOneArgument的函数cubes.js可以被其他JS或HTML文件调用。所以我的目标很满意。

但是,我的目标无法满足:./T会返回错误:

:testweb $ ./T
Unimplemented Javascript primitive caml_pure_js_expr!

虽然node cubes.js返回hello,但我确实需要能够直接测试./T,因为当出现错误时,它会很好地显示错误位置,而显示的信息node cubes.js不可读......

那么有谁知道如何解决这个问题?

PS:node --version给出v6.1.0; npm --version给出3.8.6; ocaml -version给出The OCaml toplevel, version 4.02.3js_of_ocaml --version提供2.7

1 个答案:

答案 0 :(得分:4)

我仍然认为没有避免使用cmake .. cmake --build . ,但是您可以通过以下方式改善其返回的信息

  1. 使用调试信息编译OCaml(将node选项添加到-g

  2. 将选项ocamlc添加到调用--debuginfo --sourcemap --pretty

在您的示例中,您必须这样做

js_of_ocaml