在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

使用 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:001863
用户头像

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

关注

评论

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

融合创新,智领未来 | 2024华为云开源开发者论坛云原生精彩回顾

华为云原生团队

云计算 容器 云原生

Databend 为什么使用 Rust 开发?

Databend

rust语言

北京理工大学鲲鹏昇腾科教创新孵化中心成立  打造教育、科技、人才融合发展新标杆

极客天地

【YashanDB知识库】kettle同步PG至崖山提示no encryption pg_hba.conf记录

YashanDB

数据库 yashandb

YashanDB共享集群产品能力观测:细节足见功底

YashanDB

数据库 yashandb

携手向未来,共绘新蓝图,零售创新峰会2024在桂林圆满落幕

极客天地

全新CleanMyMac专业测评:Mac电脑专业的系统清理和优化工具

阿拉灯神丁

CleanMyMac X Mac软件 如何清理苹果电脑 苹果系统清理 mac系统维护

深度解析:利用API技术高效采集淘宝商品信息(涵盖价格、详情图、主图、SKU属性等)

代码忍者

API 接口 pinduoduo API

制造业4.0:AI与机器人如何重塑生产线

天津汇柏科技有限公司

机器人 制造业 AI 人工智能

工业 4.0 赋能 | TapData 诚邀制造行业技术伙伴,共享行业数字化、智能化市场新机遇

tapdata

智能制造 实时数据集成 动态排程 质量追溯

Databend 产品月报(2024年11月)

Databend

数据库

700PB数据的数仓依然“快稳省”!ByteHouse这本白皮书揭秘关键(内附下载链接)

字节跳动数据平台

OLAP 云数据仓库 云数仓

苦熬3个月,阿里Java岗五面,成功上岸获offer!Java面试题库分享

程序员高级码农

Java 程序员 面试 Java 面试 Java 面试题

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

阿里巴巴云原生

阿里云 云原生

客观看待“去测试化”的论调

老张

软件测试 自动化测试 QA 质量保障

陶建辉荣登 2024 福布斯中国新时代颠覆力创始人榜单,见证创新力量的崛起

TDengine

数据库 tdengine 时序数据库

自动化测试AI智能体:掌握AI,人人都是自动化测试工程师

测试人

软件测试

【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题

YashanDB

数据库 yashandb

【YashanDB知识库】kettle同步大表提示java内存溢出

YashanDB

数据库 yashandb

【YashanDB知识库】查看表空间是否加密

YashanDB

数据库 yashandb

两招玩转阿里云系统事件监控

阿里巴巴云原生

阿里云 云原生

读懂NotebookLM,或许能治愈AI应用缺失症

脑极体

AI

AI听力陪练APP的技术框架

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI听力练习

数据管理的演进之路:从自建系统迈向云原生时代

代码忍者

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