Node.js 如何使用js_of_OCaml正确编译OCaml程序?
我想用OCaml的js\u来翻译以下Javascript示例程序:Node.js 如何使用js_of_OCaml正确编译OCaml程序?,node.js,ocaml,js-of-ocaml,Node.js,Ocaml,Js Of Ocaml,我想用OCaml的js\u来翻译以下Javascript示例程序: var AWS = require('aws-sdk'); AWS.config.region = 'us-west-2'; var s3 = new AWS.S3(); s3.listBuckets(function(err, data) { if (err) { console.log("Error:", err); } else { for (var index in data.Buckets) {
var AWS = require('aws-sdk');
AWS.config.region = 'us-west-2';
var s3 = new AWS.S3();
s3.listBuckets(function(err, data) {
if (err) { console.log("Error:", err); }
else {
for (var index in data.Buckets) {
var bucket = data.Buckets[index];
console.log("Bucket: ", bucket.Name, ' : ', bucket.CreationDate);
}
}
});
我编写了以下OCaml片段
let require_module s =
Js.Unsafe.fun_call
(Js.Unsafe.js_expr "require")
[|Js.Unsafe.inject (Js.string s)|]
module AWS : sig
type error
class type s3 = object
method listBuckets :
(error -> Js.Unsafe.any -> unit) Js.callback -> unit Js.meth
end
val s3client : unit -> s3
end = struct
let _js_aws = require_module "aws-sdk"
type error =
Js.Unsafe.any
class type s3 = object
method listBuckets :
(error -> Js.Unsafe.any -> unit) Js.callback -> unit Js.meth
end
let s3client () =
let constr_s3 = _js_aws ## S3 in
new%js constr_s3 ()
end
但是当我用
ocamlfind ocamlc -c -package "js_of_ocaml js_of_ocaml.syntax" -o example_s3.cmo example_s3.ml
它死了
Error: '##' is not a valid value identifier.
如何修复我的程序或编译命令以修复此问题?如果要使用ocaml.syntax的包
js\u,必须将-syntax camlp4o
选项添加到ocamlfind
但是您应该使用新的ppx语法,而不是旧的camlp4语法(因为您使用了new%js
,所以您似乎知道这一语法)。
为此,您需要用ppx语法包替换js\u of_ocaml.syntax
。您的问题与AWS无关,因此我建议更改标题。@AshishAgarwal这是个好主意!:)