在F#Azure Functions项目中共享代码

时间:2017-07-12 19:39:33

标签: azure f# azure-functions

我目前正在开发F#Azure功能uinsg VS Code,我已按原样制定了我的项目:

ProjectFolder
    -> Function1
        -> function.json
        -> run.fsx
    -> Function2
        -> function.json
        -> run.fsx

鉴于F#不支持文件夹,这两种功能之间共享代码(特别是类型)的最佳方式是什么?

1 个答案:

答案 0 :(得分:5)

F#编译器支持文件夹就好了。您可能指的是默认配置中的Visual Studio不允许向F#项目添加文件夹这一事实 - 这是一个真实的事实。但是如果你以某种方式设法将文件夹添加到项目文件中(通过手动编辑文件,或者使用F# Power Tools),那么F#编译器就不会遇到任何问题。

但无论如何这都与你的情况无关,因为脚本(fsx)与编译模块(fs)不同。脚本没有将它们绑定在一起的项目,而是必须#load彼此绑定才能使用彼此的代码。 #load可以从任何路径完成。

例如,您可能希望像这样布置代码:

ProjectFolder
    -> Common
        -> Helpers.fsx
    -> Function1
        -> function.json
        -> run.fsx
    -> Function2
        -> function.json
        -> run.fsx

然后,在Function1/run.fsx内,使用相对路径加载文件Helpers.fsx

// Function1/run.fsx
#load "../Common/Helpers.fsx"

let x = Helpers.someFunction()

从上面的示例可以看出,以这种方式加载的脚本将作为以脚本文件命名的模块出现在主机脚本中。

这有效,但随着时间的推移会变得非常混乱。我强烈建议改为使用预编译代码。这样,您可以将公共代码放在共享库中,并从两个函数中引用它。

我非常推荐this recent video from NDC Oslo。它很好地谈论了这些事情以及更多。