js_of_ocaml tips

make

js_of_ocamlではグローバルな名前空間に関数が置かれてしまう。
また、外部の型付けの弱いライブラリを呼び出すときには、OCamlの型をつけることも難しく、Js.Unsafe.eval_stringも若干冗長。

そこでOCamlで記述する範囲とは別にJavaScriptを書いて

intro.js
var foo;
if (!foo) foo = {};

(function(){
outro.js
})();
xx_.js
function hoge() {
}
xx.ml
open Js

let hoge x = ...


そうしておいて最終的にmakeでまとめる。

Makefile
%.js: %.byte
	$(COMP) -noruntime $(JSFILES) $< $(OPTIONS) -o tmp.js
	cat intro.js $*_.js tmp.js outro.js > $@

デバッグ

ブラウザ依存部分を切り離しトップレベルやユニットテストデバッグすることもできるけれど、どうしても最終的にはブラウザ上でJavaScriptデバッグが必要になることもある。そこで出力JavaScriptデバッグ情報を埋めるパッチを作った。
https://gist.github.com/3634430