Fable 是一个从 F#到 JavaScript 的转译器。它可以将 F#脚本或者整个 F#项目转换成 JavaScript。Fable 通过一个命令行界面运行,让开发人员既可以编译一个.fsx 脚本,也可以编译一整个项目。它作为一个 npm 包进行分发。
Fable 支持大部分 F#核心库和少量.NET BCL。它支持所有的基本类型,但有一些例外情况。一个值得注意的例外是 async
。Async 计算表达式可以正常运行,但RunSynchronously
不可用。
用户可以通过创建插件扩展Fable。通常,Fable 插件用于在编译过程中替换外部库调用。用户通过实现 IReplacePlugin
接口及其仅有的方法TryReplace
创建插件。下面是使用插件替换System.Random
的基本代码:
type RandomPlugin() = interface IReplacePlugin with member x.TryReplace com (info: Fable.ApplyInfo) = match info.ownerFullName with | "System.Random" -> match info.methodName with | ".ctor" -> failwith "TODO" | "Next" -> failwith "TODO" | _ -> None | _ -> None
插件可以用于处理更复杂的情况,比如转换测试框架。目前, NUnit 支持就是通过一个插件将 NUnit 测试转换成 Mocha 测试。
用户还可以使用 Fable 通过 React Native创建移动应用。 React Native 可以将 React 应用程序编译成 Android 和 iOS 应用。 Fable 插件提供了到 React Native 的绑定。一定要注意,通过 React Native 支持移动应用是一个试验性特性,会经常变化。
Fable 是一个开源项目,托管在GitHub 上。Fable 官方网站提供了文档和代码示例。举一个在成熟项目中使用Fable 的例子。 Ionide 是一个用于在 VsCode 和 Atom 中编辑 F#的插件,它自 2.0 版本开始就使用了 Fable。
评论