如何使用 Spago 安装特定的软件包版本?
How do you install a specific package version with Spago?
使用像npm
这样的工具我们可以安装一个特定的版本
npm install foo@1.2.0
如何使用 spago install
安装特定版本?
首先,spago install
不是这样做的。 "adding a package to your project" 而不是 spago install
下载当前在您的 spago.dhall
文件中引用的所有包。
其次,Spago 的理念是您无需选择特定的软件包版本。相反,您选择的是 "snapshot",它是所有可用包的某些版本的集合,这些包保证可以编译和协同工作。这是一种旨在防止版本冲突和版本控制地狱的措施(这类似于 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
这是您在运行宁spago new
后获得的默认模板。
为了覆盖特定包的版本,将其添加到 overrides
地图,如下所示:
let overrides =
{ foo =
upstream.foo // { version = "v1.2.0" }
}
然后是运行spago install
。 Spago 应该为您引入 foo
包的 1.2.0
版本。
使用像npm
这样的工具我们可以安装一个特定的版本
npm install foo@1.2.0
如何使用 spago install
安装特定版本?
首先,spago install
不是这样做的。 "adding a package to your project" 而不是 spago install
下载当前在您的 spago.dhall
文件中引用的所有包。
其次,Spago 的理念是您无需选择特定的软件包版本。相反,您选择的是 "snapshot",它是所有可用包的某些版本的集合,这些包保证可以编译和协同工作。这是一种旨在防止版本冲突和版本控制地狱的措施(这类似于 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
这是您在运行宁spago new
后获得的默认模板。
为了覆盖特定包的版本,将其添加到 overrides
地图,如下所示:
let overrides =
{ foo =
upstream.foo // { version = "v1.2.0" }
}
然后是运行spago install
。 Spago 应该为您引入 foo
包的 1.2.0
版本。