FunScript 是一种 F#编译器程序库,能让开发者使用 F#编写单页 web 应用,并在浏览器中或通过 Node.js 在服务端运行。
FunScript 有两个组件:编译器程序库将 F#代码编译为 JavaScript,而 TypeScript 类型提供器(typeprovider)将各种 JavaScript 库的 API 和 DOM 暴露为静态类型。
一个简单的使用 FunScript 编写的“Hello,World”的例子如下:
[<FunScript.JS>] module Page open FunScript open FunScript.TypeScript type lib = Api<"lib.d.ts"> let hello () = lib.window.alert("Hello, World!") do Runtime.Run(components=Interop.Components.all)
每一个模块都保存成“.fs”文件并且必须使用 FunScript.JS 的属性进行注解。可以通过类型 lib 去获得页面的 DOM。最后一行代码是用来开启启动器的。该模块默认保存在简单的 web 服务器中。
可以使用 Visual Studio、MonoDevelop 或者简单的文本编辑器去编写 FunScript 的模块。该程序库功能强大的原因在于它能让开发者访问各种 JavaScript 库中的类型,并可以获得自动完成和提示的特性。这些类型是通过 TypeScript 提供的,目前 FunScript GitHub 项目中包含了 HTML DOM、jQuery、jQueryUI、Node.js、Goole Maps 和交互功能丰富的 JavaScript 图表库 HighCharts 等的类型定义。更多数量的 JS 类型定义可以在这里找到。
使用FunScript 去编写web 应用的另一个优势在于能充分利用F#的泛型和异步编程功能。此外,开发者能使用F# 3.0 的类型提供器去和JSON 数据及REST API 打交道。所有的这些都同时保持了F#的简洁。
FunScript 的网站上有大量的例子,包括使用F#的世界银行数据图表和使用F#检索电影数据库。更多的例子可以在项目的GitHub 页面找到。
FunScript 是基于 Apache License 2.0 的开源项目。
查看英文原文: FunScript: Using the Power of F# for Writing Web Apps
感谢赵震一对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论