为什么沙丘拒绝下载依赖项?

问题描述 投票:0回答:1

我期望

dune
在运行
dune build
时自动下载依赖项,但这并没有发生。

我尝试了多种变体,并且尝试使用 ocaml 版本 4.14 和 5.0,以及在

dune-project
文件中编写的不同沙丘版本(尽管我没有尝试手动下载特定的
dune
版本,但我不确定这会自动发生),我全局安装的
dune
版本是最新的,3.10。

下面的这组特定说明是在空目录中尝试的,并遵循 dune 官方文档的说明。

~> echo '(lang dune 3.10)' > dune-project
~> echo '(executable
          (name hello_world)
          (libraries core)
          (preprocess (pps ppx_jane)))' > dune
~> echo 'open Core

         let () =
           Sexp.to_string_hum [%sexp ([3;4;5] : int list)]
           |> print_endline' > hello_world.ml'
~> dune build
File "dune", line 3, characters 12-16:
3 |  (libraries core)
                ^^^^
Error: Library "core" not found.
-> required by _build/default/hello_world.exe
-> required by alias all
-> required by alias default
File "dune", line 4, characters 18-26:
4 |  (preprocess (pps ppx_jane)))
                      ^^^^^^^^
Error: Library "ppx_jane" not found.
-> required by _build/default/hello_world.pp.ml
-> required by alias all
-> required by alias default

我收到的错误始终与从未找到的依赖项有关。我尝试复制其他项目,运行具有不同依赖项集的其他教程等等,但总是出现相同的错误。我尝试手动干预

.opam
文件,但看起来
dune
只是忽略并重写它。

在没有任何依赖项的情况下运行项目效果很好。

ocaml ocaml-dune
1个回答
0
投票

Opam 是 OCaml 的包管理器,其作用是安装依赖项。

另一方面,Dune 是一个构建系统。两者的角色截然不同。

运行

dune build
会给您带来缺少依赖项的错误,但它应该 also 更新项目的 opam 文件,允许您使用
opam install . --deps-only
安装所需的依赖项。完成此操作后,只要缺少的依赖项是唯一的错误来源,
dune build
就应该成功。

© www.soinside.com 2019 - 2024. All rights reserved.