为什么 Stack 会在每次构建时重新构建一些依赖项?

Why does Stack rebuild some dependencies on each build?

我现在正在学习使用堆栈的 hakyll 静态站点生成器。

当我在我的Hakyll站点目录下执行stack build重建site.hs时,stack每次也会重建copy/register依赖,如下图:

$ stack --version
Version 1.6.5, Git revision 24ab0d6ff07f28276e082c3ce74dfdeb1a2ca9e9 (5514 commits) x86_64 hpack-0.20.0
$ grep -Ev '^[[:space:]]*#' stack.yaml | uniq

resolver: lts-11.4

packages:
- .

$ stack build
haddock-library-1.4.5: configure
haddock-library-1.4.5: build
haddock-library-1.4.5: copy/register
pandoc-2.1.2: configure
pandoc-2.1.2: build
pandoc-2.1.2: copy/register
pandoc-citeproc-0.14.3: configure
pandoc-citeproc-0.14.3: build
pandoc-citeproc-0.14.3: copy/register
hakyll-4.12.1.0: configure
hakyll-4.12.1.0: build
hakyll-4.12.1.0: copy/register
... and site.hs.compilation ...

这对我来说很奇怪,因为我从未更改过这些包。 即使对 site.hs.

进行非常小的更改,重建也需要相当长的时间

为什么堆栈会重建这些包?有什么办法可以减少重建时间吗?

谢谢。

这里有一个讨论https://github.com/commercialhaskell/stack/issues/3899。这是一个已知问题,由较新版本的黑线鳕使用子库引发。有一个 PR 打开解决这个问题,但它还没有被合并。