如何使用 Spago 安装特定的软件包版本?

in_*_*ood 2 purescript spago

使用类似npm我们可以安装特定版本的工具

npm install foo@1.2.0 
Run Code Online (Sandbox Code Playgroud)

您如何使用 安装特定版本spago install

Fyo*_*kin 5

首先,这不是什么spago installspago install下载spago.dhall文件中当前引用的所有包,而不是“向项目添加包” 。

其次,Spago 的想法是您不选择特定的软件包版本。相反,您选择的是“快照”,它是所有可用包的某些版本的集合,这些包保证可以编译和协同工作。这是一种旨在防止版本冲突和版本控制地狱的措施(这类似于Haskell 的stack工作方式)

快照在您的packages.dhall文件中定义,然后您指定要在spago.dhall. 每个包的版本来自快照。

但是,如果您确实需要安装一个非常特定版本的软件包,并且您真的知道自己在做什么,那么您可以修改快照本身,这在packages.dhall.

默认情况下,您的packages.dhall文件可能如下所示:

let upstream =
      https://raw.githubusercontent.com/purescript/package-sets/psc-0.13.5-20200103/src/packages.dhall sha256:0a6051982fb4eedb72fbe5ca4282259719b7b9b525a4dda60367f98079132f30

let additions = {=}

let overrides = {=}

in  upstream // additions // overrides
Run Code Online (Sandbox Code Playgroud)

这是运行后获得的默认模板spago new

为了覆盖特定包的版本,将其添加到overrides地图中,如下所示:

let overrides =
  { foo =
      upstream.foo // { version = "v1.2.0" }
  }
Run Code Online (Sandbox Code Playgroud)

然后运行spago install。应的Spago拉版本1.2.0中的foo包您满意。