首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >packages.dhall和spago.dhall文件有什么区别?

packages.dhall和spago.dhall文件有什么区别?
EN

Stack Overflow用户
提问于 2020-12-26 20:20:21
回答 1查看 273关注 0票数 2

spago文档状态:

packages.dhall:这个文件意味着包含项目可用包的总量(即您可能想导入的任何包)。 在实践中,将正式的包集作为一个基础,然后您可以添加可能不在包集中的任何包,或者覆盖现有的包集。 spago.dhall:这是您的项目配置。它包括上述软件包集、依赖项列表、将用于构建的源路径以及spago将使用的任何其他项目范围设置。(我强调)

为什么这两个文件都有dependencies的概念?例如:电子书中的packages.dhallspago.dhall

spago.dhall依赖项可以在项目.spago文件夹中找到。但我找不到那些来自packages.dhall的。还有一些是常见的,比如aff。一个不同视角

..。您选择的是“快照”,它是保证编译和协同工作的所有可用包的特定版本的集合。 快照是在packages.dhall文件中定义的,然后指定要在spago.dhall中使用的特定包。每个包的版本来自快照。

听起来,spago.dhallpackages.dhall.The中关于版本的包的摘录,这有点让人困惑,因为两个文件中都没有版本说明符。

为什么有两份文件?对于来自package.json的npm生态系统的人来说,心理模式是什么(这也可能存在)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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属性的值:

代码语言:javascript
复制
{ 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中。我的照片是这样的:

代码语言:javascript
复制
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.dhalltest-unit包的依赖项,它作为覆盖添加到包集中,这大概是因为我们希望使用特殊版本的stackless-default,它不存在于正式的软件包集中。当您覆盖这样的包时,您可以覆盖包本身的spago.dhall中指定的任何字段,在本例中,我们将覆盖dependenciesrepoversion

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65460362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档