spago文档状态:
packages.dhall:这个文件意味着包含项目可用包的总量(即您可能想导入的任何包)。 在实践中,将正式的包集作为一个基础,然后您可以添加可能不在包集中的任何包,或者覆盖现有的包集。spago.dhall:这是您的项目配置。它包括上述软件包集、依赖项列表、将用于构建的源路径以及spago将使用的任何其他项目范围设置。(我强调)
为什么这两个文件都有dependencies的概念?例如:电子书中的packages.dhall和spago.dhall。
spago.dhall依赖项可以在项目.spago文件夹中找到。但我找不到那些来自packages.dhall的。还有一些是常见的,比如aff。一个不同视角
..。您选择的是“快照”,它是保证编译和协同工作的所有可用包的特定版本的集合。 快照是在
packages.dhall文件中定义的,然后指定要在spago.dhall中使用的特定包。每个包的版本来自快照。
听起来,spago.dhall是packages.dhall.The中关于版本的包的摘录,这有点让人困惑,因为两个文件中都没有版本说明符。
为什么有两份文件?对于来自package.json的npm生态系统的人来说,心理模式是什么(这也可能存在)?
发布于 2020-12-27 02:57:25
心智模型是Haskell开发人员的模型,这是大多数PureScript开发人员过去的情况,现在仍有许多开发人员。:-)
但是更严重的是,心智模型在一个“解决方案”中有多个“项目”,这是Haskell事实上的标准包管理器堆栈的模型。在Haskell中,这种情况在PureScript中非常常见--更不用说了,但也并非闻所未闻。
在这种情况下,让所有的“项目”共享一组共同的包通常是有益的,这些包都保证彼此“兼容”,这就意味着它们都一起编译,并且它们的测试都通过了。在Haskell中,这组常见的包是在stack.yaml中定义的。在斯帕戈-是packages.dhall。
一旦您建立了这个公共的包基础集,每个单独的项目都可以选择和选择它使用的特定包。在Haskell中,这是在package.yaml或<project-name>.cabal中指定的(后者正在逐步淘汰)。在斯帕戈-是spago.dhall。
但是当然,当您只有一个项目时,让两个packages.dhall来建立包的“基本集”,然后单独地让spago.dhall从那个集合中选择一些特定的包--可能看起来有点多余。实际上,可以完全不使用packages.dhall文件:只需将spago.dhall中直接设置的包的URL指定为packages属性的值:
{ name = "my-project"
, dependencies = [ ... ]
, license = "..."
, packages = https://github.com/purescript/package-sets/releases/download/psc-0.13.8-20201223/packages.dhall
, repository = "..."
, sources = [ "src/**/*.purs" ]
}这是可行的,但有一个重要的警告:哈希。当在packages.dhall中指定包集的URL时,运行spago install将计算该包集的散列,并将其放在URL旁边的packages.dhall中。我的照片是这样的:
let upstream =
https://github.com/purescript/package-sets/releases/download/psc-0.13.8-20201222/packages.dhall sha256:620d0e4090cf1216b3bcbe7dd070b981a9f5578c38e810bbd71ece1794bfe13b然后,如果软件包集的维护人员变得邪恶并更改该文件的内容,Spago将能够注意到这一点,重新计算哈希,并重新安装包。
如果您将URL直接放在spago.dhall中,则不会发生这种情况,而且您的依赖项可能会出现不同步的情况。
现在,分别讨论这一点:
为什么这两个文件都有依赖的概念?例如:电子书中的packages.dhall和spago.dhall。
如果仔细看一下链接的示例,就会发现它们不是相同的依赖项。spago.dhall中的那些是包的依赖项-- spago.dhall所在的包。
但是,dependencies in packages.dhall是test-unit包的依赖项,它作为覆盖添加到包集中,这大概是因为我们希望使用特殊版本的stackless-default,它不存在于正式的软件包集中。当您覆盖这样的包时,您可以覆盖包本身的spago.dhall中指定的任何字段,在本例中,我们将覆盖dependencies、repo和version。
https://stackoverflow.com/questions/65460362
复制相似问题