似乎我错过了一些东西。据我所知cabal sandbox init
说,从当前文件夹和所有子文件夹开始,所有cabal install
命令都限定在沙箱中。因此,此文件夹外的所有内容都不在沙盒中。
然后cabal-dev的目的是什么?我应该在沙盒中使用cabal install
还是cabal-dev install
?
答案 0 :(得分:21)
TLDR,cabal-dev
是沙盒的初始解决方案,cabal sandbox
是完全集成的实现。
直到几个月前,使用cabal
的沙箱构建还没有令人愉快的方法。对于任何图书馆维护者或任何可能担心依赖性冲突的人来说,这都是一个巨大的问题。为了解决这个问题,除了一些人之外,还有一个名为cabal-dev
的工具。它补充了cabal
并添加了一些沙箱功能。
现在已经存在了几年,在版本1.18中,cabal
获得了沙箱!这意味着我们可以从使用cabal
+ cabal-dev
切换到cabal
,因为cabal
现已包含cabal-dev
。
此外,由于沙箱完全集成到cabal中,因此它们与其他cabal功能很好地匹配,例如cabal repl
,cabal-dev
是不可能的。
最后,最近关于Haskell-Cafe邮件列表的喋喋不休表明,cabal-dev
不太可能维持更长时间,因此除了cabal sandbox
中的1-2个当前错误之外,没有理由不切换。