使用Stack构建某个包依赖的可执行文件

后端开发 2026-07-09

正在开发的这个项目在Bitbucket上有一个依赖。我已经在.cabal文件中把它指定为依赖,并在stack.yaml文件中指明了它的位置。这个依赖包包含一个可执行文件 that-exec,我想从主项目中构建它。有没有办法用stack实现?我尝试了 stack that-project:exe:that-exec,但它给出的信息是“Unknown project package: that-project”。

示例stack.yaml:

resolver: lts-xx.y

packages:
  - .

extra-deps:
  - git: [email protected]:workspace/that-project.git
    commit: 0123456789abcdef0123456789abcdef01234567

注:为澄清起见,that-exec只需要被构建。它将与其他可执行文件一起打包在一个Docker镜像中,在镜像中执行。

解决方案

先做一个小澄清:你需要 that-exec 仅作为依赖的一部分来构建,还是需要从主项目中通过 stack exec that-exec 运行的可执行文件也可用?

that-project目前位于extra-deps下,而不是packages下。这就是Stack显示:Unknown project package: that-Project 的原因。也就是说,that-project被识别为一个依赖,但不是一个项目包。

stack build that-project:exe:that-exec

Stack会在packages: 里面查找that-project,但那里只发现了一个点(.)。Bitbucket依赖在extra-deps中,因此Stack不会把它作为一个项目包组件目标。

将git依赖从extra-deps移动到packages:

resolver: lts-xx.y

packages:
  - .
  - git: [email protected]:workspace/that-project.git
    commit: 0123456789abcdef0123456789abcdef01234567

用上面的代码,这样就更容易理解了 stack build that-project:exe:that-exec 现在that-project被视为一个项目包,而不仅仅是一个额外的依赖。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章