如何避免在extra-deps中重复编译包

时间:2017-03-23 15:46:39

标签: haskell-stack

我有一个由目录树中的几个包组成的项目。如果我更改其中一个包,那么堆栈通常会自动重新编译依赖于更改的包(有时自动失败并且我没有提示 - 但这不是问题的焦点)。

在重新编译期间,我经常看到重新编译列为extra-deps的所有包。这些没有改变,重新编译是不必要的(但很耗时)。我知道有一些机制可以只编译一次这样的依赖项(只要它们没有改变)并重用。我曾经看到一个来自堆栈的消息,说一些包的先前编译被重用,指向这个缓存。

我在评论中被要求在项目目录中提供stack.yaml(我也试过像

这样的条目
- location: /home/frank/Workspace8/repo8/litMain
  extra-dep: true

但没有看到差异):

flags: {}
extra-package-dbs: []
packages:
- litMain      
- rdf4store    
- rdfhextension    
- uniform/uniform-strings    
- uniform/uniform-error     
- uniform/uniform-algebras      
- uniform/uniform-convenience       
- uniform/uniform-fileio       
- uniform/uniform-time       
extra-deps:
- chatter-0.8.0.1
- data-easy-0.7.0
- fullstop-0.1.4
- hgal-2.0.0.2
- non-negative-0.1.1
- numeric-prelude-0.4.2
- rdf4h-3.0.1
- test-invariant-0.4.5.0
- tokenize-0.3.0
resolver: lts-8.2

如何实现以前编译的和未更改的extra-deps的重用?

我尝试构建,构建 - 仅依赖于依赖项并构建 - 快照但未成功。重建所有依赖项...我在文档中找不到更多信息。

有用的评论让我重新思考并编辑了这个问题。我希望问题现在能更好地暴露出来。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

你是对的,只要extra-deps不依赖于任何本地包,本地包中的更改不应该导致任何extra-deps的重新编译。 (本地包是extra-deps部分中列出的包。)

通常我的extra-deps仅在升级堆栈或更改resolver时重新编译。

这表明堆栈的行为可能存在错误,因此如果您在下次再次看到冗余重新编译时可以为堆栈生成错误报告,那将会很棒!