我有一个包A,它使用堆栈生成库。该库用于包B(即A是B< cabal文件中列出的依赖包)。 B也是用堆栈构建的。考虑A中的四种变化情况和B上的求解器的使用:
1 - 当A发生变化时,B继续使用旧的A状态 - 这遵循堆栈的保证,编译总是以相同的方式工作,不受其他程序变化的影响。
2 - 如果软件包A有一个新版本号,那么堆栈构建在A上,然后堆栈构建B会默默使用新版本。我认为这是错误的,因为它违反了保证;它应该继续使用旧版本。
3 - 如果包A在没有新版本号的情况下更改并且在B上运行求解器,则包B继续使用旧状态。我认为这是错的;运行求解器后,保证不适用,应使用新状态。
4 - 如果包A更改为新版本号并且解算器在B上运行,则B使用新版本。这是正确的。
我无法理解这种行为以及版本号和解算器如何交互。如何在没有每次碰撞版本号的情况下控制新状态的使用?如果两个包并行处理,那么一直改变版本号是不方便的;运行求解器将A中的更改带入B并且不运行求解器就足够了,包应该总是重新编译,而与其他包中的更改无关。
对于开发,我希望有一个(附加)标志我可以在第2种情况下设置堆栈来构建,总是静默地使用依赖包的最新状态(好像会有一个新版本,没有碰到版本号)。
我是否误解了堆栈构建的保证或误解了堆栈的行为?我以前测试的代码很简单,并且在github: git@github.com:andrewufrank/test-depProj.git
上。
这个问题与我之前提出的关于多项目开发中的原子或leksahs行为的问题有关。我发现问题基本上是stack build
行为的问题,必须先为stack build
澄清。
澄清A的stack.yam
flags: {}
extra-package-dbs: []
packages:
- .
extra-deps: []
resolver: lts-8.13
和B
flags: {}
extra-package-dbs: []
packages:
- .
- ../a
extra-deps: []
resolver: lts-8.13
答案 0 :(得分:0)
这似乎是一个错误,我报告了它。
正如@duplode所述,解决方法是仅在一个项目中执行<div class="tab-nav">
<ul>
<li class="tab-nav-li">
<span>The first tab</span>
</li>
<li class="tab-nav-li">
<span>The second tab</span>
</li>
<li class="tab-nav-li">
<span>The third tab</span>
</li>
</ul>
</div>
或在stack build
时使用--force-dirty
标记。
问题似乎是由cabal的行为引起的,即使包的内容发生变化,也会重复使用ID。堆栈1.4.0中包含一个修复程序。 (参见堆栈问题#2904#3047),但似乎在所有情况下都无效。