我正在研究我的第一个主要Haskell应用程序,并希望添加嘲弄来创建一次性测试WAI线程。导入mock并运行stack test
会导致编译错误:
Failed to load interface for ‘Test.Mockery.Directory’
It is a member of the hidden package ‘mockery-0.3.5’.
Perhaps you need to add ‘mockery’ to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.
所以,我在测试依赖项下添加了对我的cabal文件的嘲弄。但是,当我运行stack build
或stack test
时,会自动从cabal文件中删除。
我还尝试在mockery-0.3.5
文件的extra-deps
下列出stack.yaml
。这并不令人惊讶,因为嘲弄是我的一部分,而额外的deps则适用于lts之外的包裹。
如何让堆栈识别出应该将mockry作为依赖项包含在项目中?
这是我的stack.yaml:
flags: {}
ghc-options:
! '*': -Wall
packages:
- .
extra-deps: [
]
resolver: lts-9.5
我正在使用堆栈版本1.5.1
我认为这是一个愚蠢的构建问题,并期待面对我明显的疏忽。
答案 0 :(得分:0)
在stack.yaml
中,您声明了Stackage LTS版本,这是您希望依赖的黑客依赖关系的精选列表。您还可以依赖于本地软件包和git中不在Hackage中的软件包。您也可以在LTS中更改软件包的版本,只要它们遵守其他依赖项的约束即可。
package.yaml
是构建文件。您想要直接在Haskell代码中直接导入的所有程序包都必须在此处声明为依赖项,即使它们已在stack.yaml
中明确声明。
最后,当您看到It is a member of the hidden package
时,这意味着您的一个依赖项正在使用该程序包,但在构建文件中未将其声明为依赖项。