0

在使用 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 模块),没有名称修改。

来源

4

1 回答 1

2

BuckleScript 可以以多种不同的模块格式输出模块,然后可以使用诸如 webpack 或 rollup 之类的捆绑器将其与其依赖项捆绑在一起。输出并不真正打算用作独立单元,因为在任何情况下您都可以做的事情相当有限,因为标准库和运行时库是单独的模块。甚至像乘法这样微不足道的事情也会涉及运行时库。

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

模块格式通过以下package-specs属性配置bsconfig.json

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

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

于 2017-10-23T23:54:17.687 回答