2017-07-12 50 views
5

我目前正在开发F#Azure的功能uinsg VS代码,我已经奠定了我的项目是这样的:分享代码项目

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

由于F#不支持文件夹什么是最好的在两个函数之间共享代码(特别是类型)的方式?

+3

我建议对Azure函数使用fsproj(预编译)而不是脚本。特别是如果你想分享功能之间的代码。预编译只有好处。你将无法使用VS Azure函数项目,但你不需要它。 – TheQuickBrownFox

回答

5

F#编译器支持文件夹就好了。您可能指的是Visual Studio在默认配置下不允许向F#项目添加文件夹 - 这是一个真实的事实。但是,如果你以某种方式设法将文件夹添加到项目文件(通过手动编辑该文件或使用F# Power Tools),那么F#编译器将不会有任何问题。 (fsx)与编译模块(fs)不是一回事。脚本没有将它们绑定在一起的项目,而是必须相互对接才能使用彼此的代码。并且可以从任何路径完成#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。它对这些事情以及其他方面都说得很好。

+0

我是否应该甚至费心将非脚本文件与命名空间/模块等包含在一起。? – Slugart

+1

是的,您也可以包含非脚本文件。他们只是有点尴尬的使用,但他们会工作。但我不推荐它。就像我说的,我建议预编译。 –

+0

我有我的instapaper队列中的视频:) – Slugart