使用 opam 管理相依性
安裝現有相依性
我們建議在本地 opam switch 中安裝專案的相依性,以隔離您的開發環境。
如果您使用 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
現在,如果由於某些原因您偏好在全域 switch 中安裝相依性,您可以執行
opam switch set <switch_name>
opam install . --deps-only --with-test --with-doc
一旦成功安裝相依性,並且假設專案使用 Dune 作為建置系統,您可以使用以下指令進行編譯
opam exec -- dune build
或者,如果您使用 eval $(opam env)
設定您的環境
dune build
從 opam 儲存庫新增相依性
為了避免將專案設定複製到多個檔案中,當新增 (generate_opam_files true)
節點時,Dune 允許您從 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
節點中新增您的相依性。它應該看起來像這樣
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
來更新您目前 switch 的相依性。
在您的 Switch 中安裝相依性
若要從 opam 儲存庫將套件安裝到您目前的 switch,您可以執行
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
在您的 Switch 中安裝 Git 相依性
您可以直接從 Git URL 在您目前的 switch 中安裝套件
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 文件。