开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

使用 Fake 和 Paket 编写 F#脚本

  • 2016-12-28
  • 本文字数:1066 字

    阅读完需:约 3 分钟

编写 F#脚本一般使用.fsx 文件和 F# Interactive(Fsi)。对于需复用的脚本, Paket Fake 提供了处理各种用例的特性。Fake 用于构造复杂的脚本,Paket 则提供了依赖管理。

Fake

虽然 Fake 本身是一种构建工具,但是其构建目标(Target)体系也可用于编写脚本。这是由于构建目标可用相互之间的关系定义,这同样也是脚本的惯用写法。使用 Fake 可以调用所有.Net 库。下面的代码片段定义了运行 FluentMigrator Migration 的两个 Target:

复制代码
open System.Management.Automation
Target "BuildMigrations" (fun _ ->
!! "src/app/**/migrations.csproj"
|> MSBuildRelease buildDir "Build"
)
Target "RunMigrations" (fun _ ->
MigrateToLatest connectionString [assembly] options
)
// 定义依赖。
"BuildMigrations"
==> "RunMigrations"

脚本语言的一个理想特性是无需预先编译即可运行代码段。通过使用 F# Interactive(Fsi),F#也可具有同样功能,但这也意味着每台运行 F#脚本的机器都必须安装 Fsi。与此不同,虽然 Fake 也实现了无需预先编译即可运行脚本,但是不必在运行 Fake 的机器安装 F#编译器。该功能源于 Fake 内直接植入了 F#编译器,这是由“ F# Compiler Services ”项目实现的。

Fake 还可运行 PowerShell 脚本,这使得必要时可混搭使用 F#和 Powershell。

复制代码
open System.Management.Automation
Target "Powershell" (fun _ ->
PowerShell.Create()
.AddScript("& 'configure-server.ps1'")
.AddParameter("Verbose", "")
.Invoke())

Paket

一些脚本的运行需要额外库的支持,尤其是在处理外部服务时。虽然对脚本而言这样的情况并不常见,但是依赖也应该被软件包管理器所管理。使用 Paket 可以处理另外一种编写脚本时的常见情况,即对独立文件的引用

复制代码
// 引用 NuGet 包。
nuget FSharp.Management
// 引用 GitHub 上的一个文件。
github myRepo/aProject dependency.dll

Paket 还提供了组依赖功能,即当依赖仅限于子集时,无需取用全部软件包。此功能非常适合于脚本,因为许多脚本可能使用同一个依赖文件。

复制代码
// 依赖共享。
nuget Newtonsoft.Json
nuget FSharp.Core
group Web
nuget Fake.IIS
nuget Suave
group Database
nuget FluentMigrator
nuget SQLProvider

本文摘自“ F# Advent Calendar ”,它是 F#社区首创的一个线上技术交流活动。

查看英文原文: Scripting in F# Using Fake and Paket


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-12-28 18:001403
用户头像

发布了 227 篇内容, 共 76.5 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

低代码开发,或许是节约成本更好的选择

树上有只程序猿

软件开发 低代码

专业ER图工具大盘点,哪款是你的菜?

职场工具箱

ER图 设计数据库模型

初识inBuilder内存计算模块--业务数据同步

inBuilder低代码平台

数据库

语音识别技术在智能门禁系统中的应用与设计

来自四九城儿

语音识别技术在教育领域的应用与挑战

来自四九城儿

语雀生产事故不该只是运维的锅

文思源想

运维 产品定位 生产事故 技术感悟 语雀故障

外贸建站优化外贸网站推广的四个技巧

九凌网络

外贸业务员必学的外贸推广方式

九凌网络

年终总结必备!8款好用的AI制作PPT软件推荐。

彭宏豪95

AI PPT 年终总结 在线白板 AIGC

抖音双十一,主播“分食”李佳琦

自象限

跨国传输的常见问题与对应解决方案

镭速

跨国数据传输 跨国传输 跨国传输软件

TDengine 3.2.0.0 重磅发布!S3 存储 + IP 白名单正式上线

TDengine

tdengine 时序数据库

LeetCode题解:993. 二叉树的堂兄弟节点,BFS,JavaScript,详细注释

Lee Chen

LeetCode

亚洲专业美发行业领军企业汉高中国签约赛博威,以TPM营销费用管理推进企业业务数字化改革

赛博威科技

第24期 | GPTSecurity周报

云起无垠

接上回,如何用 LlamaIndex 搭建聊天机器人?

Zilliz

Milvus 向量数据库 ChatGPT LLM

今年秋招VS去年秋招!我滴娘啊

王磊

Java

Databend + lakeFS:将数据版本控制嵌入你的分析工作流

Databend

语音识别技术在智能家居控制系统中的应用与前景

来自四九城儿

测试工作的价值体现

BY林子

软件测试 软件质量 测试的价值 绩效考核

我应该删除低质量页面以提高Google排名吗?

九凌网络

闭包解密:从小白到高手,掌握Python中的闭包技巧

高端章鱼哥

Python

copilot使用体验

FunTester

可视化流程编排(Bpmn.js)介绍及实践

ZA技术社区

众安科技 众安保险 ZA技术社区 无界山

聊点技术|秒级根因定位可能吗?博睿数据将不可能变为可能

博睿数据

运维 监控 可观测性

你不知道的ER图秘诀,都在这篇在线教程里了!

职场工具箱

ER图 实体-关系图

2023年APP备案操作教程 阿里云APP备案试列 APP公钥sha1签名获取方法

雪奈椰子

2023年APP备案操作教程 阿里云APP备案试列 APP公钥sha1签名获取方法

存算分离下设计数据库计算引擎的思路

计算引擎 存算分离

文心一言 VS 讯飞星火 VS chatgpt (126)-- 算法导论11.1 1题

福大大架构师每日一题

福大大架构师每日一题

什么样的网站才是利于google等搜索引擎优化的营销型网站

九凌网络

使用Fake和Paket编写F#脚本_.NET_Pierre-Luc Maheu_InfoQ精选文章