Stack 坚持构建 Cabal 包
Stack insists on building Cabal package
我正在使用 Stack 进行 Haskell 项目。
最近,我们开始使用 lens package which requires the Cabal package as a dependency, but we switched to lens-simple,因为构建 Cabal 包对于我们测试构建项目的一些旧机器来说过于耗费资源。
然而,尽管 lens-simple 和我们的任何其他包都不依赖于 Cabal 包,Stack 继续尝试构建它。
有没有办法让 Stack 阻止它?它使得构建过程在大多数机器上非常漫长,而在较弱的机器上则不可能。
项目的依赖列表:
HUnit 1.6.0.0
QuickCheck 2.12.6.1
ansi-terminal 0.8.2
array 0.5.3.0
base 4.12.0.0
binary 0.8.6.0
bytestring 0.10.8.2
call-stack 0.1.0
clock 0.7.2
colour 2.3.4
containers 0.6.0.1
deepseq 1.4.4.0
directory 1.3.3.0
erf 2.0.0.0
filepath 1.4.2.1
ghc-boot-th 8.6.3
ghc-prim 0.5.3
hspec 2.6.1
hspec-core 2.6.1
hspec-discover 2.6.1
hspec-expectations 0.8.2
integer-gmp 1.0.2.0
lens-family 1.2.3
lens-family-core 1.2.3
lens-family-th 0.5.0.2
lens-simple 0.1.0.9
mtl 2.2.2
ncurses 0.2.16
netflak 0.1.0.0
pretty 1.1.3.6
primitive 0.6.4.0
quickcheck-io 0.2.0
random 1.1
rts 1.0
setenv 0.1.1.3
stm 2.5.0.0
template-haskell 2.14.0.0
text 1.2.3.1
tf-random 0.5
time 1.8.0.2
transformers 0.5.5.0
unbounded-delays 0.1.1.0
unix 2.7.2.2
我的猜测是您的依赖项之一使用自定义设置节,其中 Stack 需要针对 Cabal
库构建 Setup.hs
文件,因此是隐式依赖项。我们已经针对 Stackage 进行了一些讨论,讨论我们是否应该像今天一样提供最新版本的 Cabal 库——并冒着迫使人们建立严重依赖的风险——而不是坚持使用随附的 Cabal 版本GHC.
无论如何,您可以使用一种稍微复杂的方法来解决这个问题,即创建一个删除 Cabal 库的自定义快照。它看起来像这样:
# stack.yaml: point to the custom snapshot
resolver: snapshot.yaml
# snapshot.yaml: use the original snapshot and add a drop-packages
resolver: nightly-2019-03-17
name: drop-cabal
drop-packages:
- Cabal
我正在使用 Stack 进行 Haskell 项目。 最近,我们开始使用 lens package which requires the Cabal package as a dependency, but we switched to lens-simple,因为构建 Cabal 包对于我们测试构建项目的一些旧机器来说过于耗费资源。
然而,尽管 lens-simple 和我们的任何其他包都不依赖于 Cabal 包,Stack 继续尝试构建它。
有没有办法让 Stack 阻止它?它使得构建过程在大多数机器上非常漫长,而在较弱的机器上则不可能。
项目的依赖列表:
HUnit 1.6.0.0
QuickCheck 2.12.6.1
ansi-terminal 0.8.2
array 0.5.3.0
base 4.12.0.0
binary 0.8.6.0
bytestring 0.10.8.2
call-stack 0.1.0
clock 0.7.2
colour 2.3.4
containers 0.6.0.1
deepseq 1.4.4.0
directory 1.3.3.0
erf 2.0.0.0
filepath 1.4.2.1
ghc-boot-th 8.6.3
ghc-prim 0.5.3
hspec 2.6.1
hspec-core 2.6.1
hspec-discover 2.6.1
hspec-expectations 0.8.2
integer-gmp 1.0.2.0
lens-family 1.2.3
lens-family-core 1.2.3
lens-family-th 0.5.0.2
lens-simple 0.1.0.9
mtl 2.2.2
ncurses 0.2.16
netflak 0.1.0.0
pretty 1.1.3.6
primitive 0.6.4.0
quickcheck-io 0.2.0
random 1.1
rts 1.0
setenv 0.1.1.3
stm 2.5.0.0
template-haskell 2.14.0.0
text 1.2.3.1
tf-random 0.5
time 1.8.0.2
transformers 0.5.5.0
unbounded-delays 0.1.1.0
unix 2.7.2.2
我的猜测是您的依赖项之一使用自定义设置节,其中 Stack 需要针对 Cabal
库构建 Setup.hs
文件,因此是隐式依赖项。我们已经针对 Stackage 进行了一些讨论,讨论我们是否应该像今天一样提供最新版本的 Cabal 库——并冒着迫使人们建立严重依赖的风险——而不是坚持使用随附的 Cabal 版本GHC.
无论如何,您可以使用一种稍微复杂的方法来解决这个问题,即创建一个删除 Cabal 库的自定义快照。它看起来像这样:
# stack.yaml: point to the custom snapshot
resolver: snapshot.yaml
# snapshot.yaml: use the original snapshot and add a drop-packages
resolver: nightly-2019-03-17
name: drop-cabal
drop-packages:
- Cabal