2

我想编写和编译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,并转换Tcubes.js

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

js_of_ocaml T -o cubes.js

我测试过 的函数可以很好jsOneArgumentcubes.js被其他的JS或者HTML文件调用。所以我的 1) 目标得到了满足。

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

:testweb $ ./T
Unimplemented Javascript primitive caml_pure_js_expr!

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

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

PS:node --versionv6.1.0npm --version3.8.6; ocaml -versionThe OCaml toplevel, version 4.02.3. js_of_ocaml --version2.7.

4

1 回答 1

4

我无论如何都看不到要避免使用,node但是您可以通过以下方式改进它返回的信息

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

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

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

ocamlfind ocamlc -g -package js_of_ocaml.ppx -linkpkg cubes.ml -o T
js_of_ocaml --debuginfo --sourcemap --pretty T -o cubes.js
于 2018-10-30T13:39:30.903 回答