我有一个fsx文件,我尝试这样做
#if DEV
#load "MyFile.fs"
#endif
// Later in the file
#if DEV
callSomethingFromMyFile()
#endif
如果我删除 #load
指令周围的 #if DEV ... #endif
,则 callSomethingFromMyFile()
有效 .
我意识到这可能是一个奇怪的事情,但这是因为我正在使用寓言编译为F#到js,如果我想在生成“build”时排除文件以减少js文件大小 .
3 回答
我在以下公关中解决了这个问题:https://github.com/fable-compiler/Fable/pull/429
您当前可以将定义传递给交互式检查器,它仅用于当前未执行的fsx文件 .
在常规的F#脚本中,有可能,似乎寓言无法处理它 .
要验证它是否在常规F#中工作,我创建了以下文件:
MyModule.fs:
script.fsx:
正在运行
fsharpi --define:DEV --exec script.fsx
按预期工作 . 我希望Windows上的fsi
能够正常运行 .“当您在F#Interactive中执行脚本时,某些指令可用,这些指令在执行编译器时不可用 . 下表总结了使用F#Interactive时可用的指令 . ”
https://docs.microsoft.com/en-us/dotnet/articles/fsharp/tutorials/fsharp-interactive/index#differences-between-the-interactive-scripting-and-compiled-environments
然后该表列出了#load等 . 不完全清楚文本(编译器与预处理器),但它也有道理......