【问题标题】:Stack won't resolve a 'hidden' dependency堆栈不会解决“隐藏”依赖项
【发布时间】:2017-09-22 01:46:30
【问题描述】:

我正在开发我的第一个主要 Haskell 应用程序,并希望添加 mockery 以创建一次性测试 WAI 线程。导入 mockery 并运行 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 buildstack test 时,会自动从 cabal 文件中删除嘲笑。

我还尝试在stack.yaml 文件中的extra-deps 下列出mockery-0.3.5。不出所料,这不起作用,因为嘲弄是我的 lts 的一部分,而额外的 deps 用于 lts 之外的包。

我怎样才能让堆栈识别出应该将嘲笑作为项目的依赖项包含在内?

这是我的 stack.yaml:

flags: {}
ghc-options:
  ! '*': -Wall
packages:
- .
extra-deps: [
]

resolver: lts-9.5

我正在使用堆栈版本 1.5.1

我认为这是一个愚蠢的构建问题,并期待面对我明显的疏忽。

【问题讨论】:

  • 实际上,不,这可能不是重复的,请仔细阅读您的问题。听起来您正在使用hpack,它会为您生成.cabal 文件。改为在 package.yaml 文件中添加依赖项。
  • packages.yaml 正是这个地方。谢谢!

标签: haskell haskell-stack


【解决方案1】:

stack.yaml 中,您声明了 Stackage LTS 版本,这是您想要依赖的 hackage 依赖项的精选列表。您还可以依赖本地包和 git 中不在 Hackage 中的包。您也可以更改 LTS 中的包的版本,只要它们尊重其他依赖项的约束即可。

package.yaml 是构建文件。您想直接在 Haskell 代码中导入的任何包都必须在此处声明为依赖项,即使它们已在 stack.yaml 中显式声明。

最后,当您看到It is a member of the hidden package 时,这意味着您的依赖项之一正在使用该包,但它并未在您的构建文件中声明为依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多