Не реализованный 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 но вы можете улучшить информацию, возвращаемую им

  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
Другие вопросы по тегам