使 ReasonML/Bucklescript 输出 ES5 兼容代码
Making ReasonML/Bucklescript output ES5 compatible code
在使用 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的博客上阅读,这似乎是不可能的:
one OCaml module compiled into one JavaScript module (AMDJS, CommonJS, or Google module) without name mangling.
BuckleScript 可以输出多种不同模块格式的模块,然后可以使用 webpack 或 rollup 等捆绑器将其与其依赖项捆绑在一起。输出并不是真正打算用作独立单元,因为在任何情况下您可以做的事情都相当有限,因为标准库和 运行time 库是单独的模块。甚至像乘法这样微不足道的事情也会涉及到 运行时间库。
你可以配置BuckleScript输出es6模块,只要你的浏览器支持就可以直接在浏览器中运行。但这仍然需要从您的 bs-platform 安装中手动提取标准和 运行time 库。
模块格式通过package-specs
属性 in bsconfig.json
配置:
{
...
"packages-specs": ["es6-global"] /* Or "es6" */
}
说了这么多,您实际上 可以 通过将 [@@@bs.config { no_export }]
放在文件顶部来关闭导出。但这是没有记录的,因为由于上述原因,它在实践中的使用非常有限。
在使用 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的博客上阅读,这似乎是不可能的:
one OCaml module compiled into one JavaScript module (AMDJS, CommonJS, or Google module) without name mangling.
BuckleScript 可以输出多种不同模块格式的模块,然后可以使用 webpack 或 rollup 等捆绑器将其与其依赖项捆绑在一起。输出并不是真正打算用作独立单元,因为在任何情况下您可以做的事情都相当有限,因为标准库和 运行time 库是单独的模块。甚至像乘法这样微不足道的事情也会涉及到 运行时间库。
你可以配置BuckleScript输出es6模块,只要你的浏览器支持就可以直接在浏览器中运行。但这仍然需要从您的 bs-platform 安装中手动提取标准和 运行time 库。
模块格式通过package-specs
属性 in bsconfig.json
配置:
{
...
"packages-specs": ["es6-global"] /* Or "es6" */
}
说了这么多,您实际上 可以 通过将 [@@@bs.config { no_export }]
放在文件顶部来关闭导出。但这是没有记录的,因为由于上述原因,它在实践中的使用非常有限。