Javascript 如何在ReasonML中编程?

Javascript 如何在ReasonML中编程?,javascript,ocaml,protocol-buffers,reason,bucklescript,Javascript,Ocaml,Protocol Buffers,Reason,Bucklescript,我有一组protobuf类型,我想生成用于序列化的reasonML代码。到目前为止,我发现ocaml协议无法安装到我的系统上。使用docker FROM ocaml/opam:alpine RUN opam remote add dev git://github.com/mirage/mirage-dev RUN opam depext -i mirage RUN opam depext conf-m4.1 RUN yes | opam install ocaml-protoc 然后运行命令

我有一组protobuf类型,我想生成用于序列化的reasonML代码。到目前为止,我发现ocaml协议无法安装到我的系统上。使用docker

FROM ocaml/opam:alpine
RUN opam remote add dev git://github.com/mirage/mirage-dev
RUN opam depext -i mirage

RUN opam depext conf-m4.1
RUN yes | opam install ocaml-protoc
然后运行命令:

docker run \
        --mount type=bind,source=$(PWD)/../src/proto,target=/home/opam/ocaml \
        --mount type=bind,source="$(PWD)"/../../proto,target=/home/opam/proto \
        -ti eb1b1ed36a35 \
        ocaml-protoc -ml_out=/home/opam/ocaml /home/opam/proto/chat.proto > /dev/null"
我已经能够编译一组ml/mli文件。但是,这些文件依赖于一些已卸载的lib,例如
Pbrt
。摘录:

let rec decode_friend_event_etype d = 
  match Pbrt.Decoder.int_as_varint d with
  | 0 -> (Chat_types.Arrival:Chat_types.friend_event_etype)
  | 1 -> (Chat_types.Departure:Chat_types.friend_event_etype)
  | _ -> Pbrt.Decoder.malformed_variant "friend_event_etype"
--------------^

有没有一种干净的方法可以在不安装任何本机libs的情况下解决此问题?为了使bucklescript能够将其编译成JS,必须提供源代码中包含的内容

想到的解决方案是在proto实现的同时生成公共依赖项(如Pbrt)。有人找到了解决这个问题的方法吗?

有一个和一个演示如何使用它

我自己没有尝试过,但据我所知,您必须添加bucklescript protobuf运行时作为普通bucklescript依赖项

npm install bs-ocaml-protoc-json
添加到

然后使用
-bs
标志生成具有
ocaml协议的bucklescript特定代码:

ocaml-protoc -bs -ml_out=/home/opam/ocaml /home/opam/proto/chat.proto

您现在应该在
/home/opam/ocaml
中拥有生成的源代码,并且假设您有一个bucklescript项目,将其正确设置为源文件夹,应该能够使用
bsb-make world

编译它,我在interm中使用
bs-ocaml-protoc-json
,但是我要求使用protobuf编码,不从原始文件生成json编码器,而afaik是库提供的全部。你是说二进制编码?这一点从你的问题中根本看不清楚。看起来像是
ocaml协议
包含二进制编码运行时本身。您可能能够为bucklescript提取并打包它。另一种选择是使用
js\u of_ocaml
编译它,它与opam生态系统的交互更好,但需要编写用于互操作的bucklescript绑定,并且可能会变得非常臃肿。
ocaml-protoc -bs -ml_out=/home/opam/ocaml /home/opam/proto/chat.proto