Не реализованный Javascript примитив caml_pure_js_expr
Я хочу написать и скомпилировать cubes.ml
такой, что 1) он оборачивает функцию OCaml для создания функции 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. Так что моя 1) цель достигнута.
Однако моя 2) цель не может быть достигнута: ./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.3
, js_of_ocaml --version
дает 2.7
,
1 ответ
Я не вижу, чтобы избежать использования node
но вы можете улучшить информацию, возвращаемую им
компиляция OCaml с отладочной информацией (добавить
-g
возможностьocamlc
)добавить варианты
--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