使ReasonML / Bucklescript输出ES5兼容代码

时间:2017-10-23 22:07:54

标签: reason bucklescript

使用ReasonML和Bucklescript时,是否可以配置Bucklescript以便它不会生成export语句?如果生成的代码可以在浏览器中使用,即ES5(或ES6)兼容,我更喜欢。

编辑:好的,在尝试更多的工具链时,我意识到仅仅关闭export是不够的。见下面的例子:

function foo(x, y) {
  return x + y | 0;
}

var Test = /* module */[
  /* foo */foo
];

exports.Test = Test;

如果删除exports,此代码将污染全局命名空间,并且只是从ES5兼容性角度断开。

编辑2 :阅读Bucklescript的博客,这似乎不太可能:

  

一个OCaml模块编译成一个JavaScript模块(AMDJS,CommonJS或Google模块),没有名称损坏。

Source

1 个答案:

答案 0 :(得分:2)

BuckleScript可以输出多种不同模块格式的模块,然后可以使用捆绑包(例如webpack或汇总)将它们与其依赖项捆绑在一起。输出实际上并不打算用作独立单元,因为您在任何情况下都可以做的事情相当有限,因为标准库和运行时库是单独的模块。甚至像乘法这样微不足道的东西也会涉及运行时库。

您可以配置BuckleScript输出es6模块,只要您的浏览器支持它就可以直接在浏览器中运行。但这仍然需要从bs-platform安装中手动提取标准库和运行时库。

模块格式是通过package-specs中的bsconfig.json属性配置的:

{
  ...
  "packages-specs": ["es6-global"] /* Or "es6" */
}

说了这么多,你实际上可以通过将[@@@bs.config { no_export }]放在文件的顶部来关闭导出。但由于上述原因,在实践中使用非常有限,因此没有记载。