【问题标题】:Making ReasonML/Bucklescript output ES5 compatible code制作 ReasonML/Bucklescript 输出 ES5 兼容代码
【发布时间】:2017-10-23 22:07:53
【问题描述】:

在使用 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.

【问题讨论】:

    标签: reason bucklescript


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢!也许可以将此信息或类似信息添加到reasonml.github.io/guide/javascript/quickstart?或者创建两个新页面,一个用于浏览器的快速入门,另一个用于本地?
    • 这更像是一个 BuckleScript 而不是一个 Reason 的东西。 BuckleScript 网站和文档将在不久的将来进行大修,类似于最近对 Reason 和 ReasonReact 所做的。我希望届时文档将得到极大改进(并将亲自为改进做出贡献)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多