歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用Fake和Paket編寫F#腳本

使用Fake和Paket編寫F#腳本

日期:2017/3/1 9:07:22   编辑:Linux編程

編寫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

Copyright © Linux教程網 All Rights Reserved