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

Share code in F# Azure Functions project

我目前正在开发 F# Azure 函数 uinsg VS 代码,我已经这样布置了我的项目:

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

鉴于 F# 不支持文件夹,在这两个函数之间共享代码(尤其是类型)的最佳方式是什么?

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。它把这些和更多的东西都说得很好。