使用 opam 管理依赖项
安装现有依赖项
我们建议在本地 opam 切换中安装项目的依赖项,以隔离您的开发环境。
如果您使用的是 opam 2.0.X
,您可以使用以下命令:
# if you need external system dependencies
opam pin add -n .
opam depext -i <packages>
opam install . --deps-only --with-test --with-doc
如果您使用的是 opam 2.1.X
,它会自动安装系统依赖项,因此您可以运行以下命令:
opam install . --deps-only --with-test --with-doc
现在,如果您出于某种原因更愿意在全局切换中安装您的依赖项,您可以运行以下命令:
opam switch set <switch_name>
opam install . --deps-only --with-test --with-doc
一旦依赖项成功安装,假设项目使用 Dune 作为构建系统,您可以使用以下命令进行编译:
opam exec -- dune build
或者,如果您使用 eval $(opam env)
设置环境:
dune build
从 opam 仓库添加依赖项
为了避免将项目配置复制到多个文件中,Dune 允许您在添加 (generate_opam_files true)
节时,从 dune-project
中的包定义生成项目的 *.opam
文件。
然而,opam 仍然是生态系统中的核心部分,您很可能在某些时候需要使用 *.opam
文件,因此我们不会对您是否应该在 *.opam
文件或 dune-project
中指定依赖项做出决定。
将依赖项添加到您的 dune-project 文件中
如果项目从 dune-project
生成 opam 文件(您可以从 *.opam
文件顶部的 # This file is generated by dune, edit dune-project instead
行判断),您可以在适当的 package
节中将依赖项添加到 dune-project
中。它应该看起来像这样
namesynopsis"A short, but powerful statement about your project""An complete and exhaustive description everything your project does."4:with:with
添加依赖项后,您可以使用 dune build
构建项目,这将重新生成 *.opam
文件。
将依赖项添加到您的 .opam 文件中
如果 *.opam
文件没有生成,您可以在 depends
字段中直接添加依赖项。它应该看起来像这样
opam-version: "2.0"
synopsis: "A short, but powerful statement about your project"
description: "An complete and exhaustive description everything your project does."
depends: [
"ocaml" {>= "4.08.0"}
"dune"
"alcotest" {with-test}
"odoc" {with-doc}
]
build: [
["dune" "subst"] {pinned}
[
"dune"
"build"
"-p"
name
"-j"
jobs
"@install"
"@runtest" {with-test}
"@doc" {with-doc}
]
]
无论哪种方式,一旦您在适当的文件中添加了依赖项,您就可以运行 opam install . --deps-only
来更新您当前切换的依赖项。
在您的切换中安装依赖项
要将包从 opam 仓库安装到您的活动切换中,您可以运行以下命令:
opam install <package-name>
以获取包的最新版本。
如果您想安装包的特定版本,请使用以下命令:
opam install <package-name>.<package-version>
代替。
从 Git 仓库添加依赖项
有时,您可能希望直接从 Git 仓库安装包,例如,当它在 opam 仓库中不可用或当您想使用未发布的版本时。
将 Git 依赖项添加到 dune-project 文件中
在使用 Dune 进行构建和 opam 进行包管理的 OCaml 项目中,您可以使用 dune-project
和 .opam.template
文件的组合来指定 Git 依赖项。
这种方法在您希望将 Dune 和 opam 配置保持同步时特别有用,尤其是在处理来自 Git 仓库的外部依赖项时。
如果您的项目没有与您的项目 .opam
文件同名,但文件扩展名为 .opam.template
的文件,您必须创建它。
例如,如果您的项目 opam 文件为 my_project.opam
,请创建 my_project.opam.template
并使用 pin-depends
告诉 opam
从 Git 仓库安装包。
pin-depends: [
["<package-name>.dev" "git+https://<repository-url>#<branch-or-commit>"]
]
接下来,通过运行以下命令重新生成项目的 .opam
文件:
opam exec -- dune build
然后,运行以下命令:
opam install . --deps-only
以安装您添加的新依赖项。
将 Git 依赖项添加到您的 .opam 文件中
要打开您的 opam 文件,请找到您的 OCaml 项目的 opam
文件。此文件定义了包的依赖项和其他元数据。
如果 opam
文件中不存在 pin-depends
字段,请添加它。在此字段中,您指定包以及应该从中获取它的 URL。例如
pin-depends: [
["<package-name>.dev" "git+https://<repository-url>#<branch-or-commit>"]
]
最后,使用 opam install 来安装依赖项,包括 pin-depends
字段中指定的依赖项。
opam install . --deps-only
在您的切换中安装 Git 依赖项
您可以直接从 Git URL 在您的活动切换中安装包
opam pin add <package-name> <git-url>#<branch-or-commit>
处理仅开发依赖项
Opam 没有开发依赖项的概念。相反,每个依赖项可以是以下之一:
- 正常依赖项(在运行时使用)
- 构建依赖项(用于构建项目)
- 测试依赖项(用于测试项目)
- 文档依赖项(用于生成文档)
在添加新依赖项时,如“更新依赖项”工作流中所示,您可以向依赖项添加标志。
对于 dune-project
,它看起来像这样
:with
对于 *.opam
文件,它看起来像这样
"alcotest" {with-test}
每个依赖项的可用标志为
- 正常:无标志
- 构建:
build
- 测试:
with-test
- 文档:
with-doc
有关 opam 语法的更多详细信息,请参见 opam 文档。