禁用ocaml opam中的可选依赖项安装

禁用ocaml opam中的可选依赖项安装,ocaml,opam,Ocaml,Opam,医生说: 包还可以具有可选的依赖项。这些是包可以使用的依赖项,但不是必需的。默认情况下,它们不会随软件包一起安装,但如果在安装可选依赖它们的软件包时已经安装了它们,则opam安装将利用它们。例如,如果在安装lwt之前安装react,opam install lwt将配置lwt使用react,但仅安装lwt不会安装react 我能把它关掉吗?通过使用react和lwt的这个示例,即使我已经安装了ceat,我也不希望lwt在以后安装lwt时配置react。从技术上讲,这是可能的,因为opam为包装商

医生说:

包还可以具有可选的依赖项。这些是包可以使用的依赖项,但不是必需的。默认情况下,它们不会随软件包一起安装,但如果在安装可选依赖它们的软件包时已经安装了它们,则opam安装将利用它们。例如,如果在安装lwt之前安装react,opam install lwt将配置lwt使用react,但仅安装lwt不会安装react


我能把它关掉吗?通过使用react和lwt的这个示例,即使我已经安装了ceat,我也不希望lwt在以后安装lwt时配置react。

从技术上讲,这是可能的,因为opam为包装商提供了足够的选项,让用户完全控制包装配置。实际上,它很少被使用

包装机选项 作为包维护者,您可以使用opam的全局和交换机配置,让用户决定他们想要包的哪些可选部分。或者,您可以在可选依赖项和您的包之间引入一个额外的桥接包,以断开硬连接,例如,当存在
react
时,不必重新配置
lwt
,只有在安装了伪包(例如
conf lwt enbale react
时,才可以重新配置它,这又取决于
react

用户选项 如果您感兴趣的软件包没有为您提供足够的控制,那么您有两种解决方法,但理想情况下,您应该联系软件包维护人员,请求修复您的软件包1。在任何情况下,你都应该扮演包装员的角色,至少是暂时的

第一个选项是下载包源,修改opam文件,并锁定固定版本,例如

opam source lwt  
edit <lwt-source>/opam
opam pin add lwt <lwt-source>
包装商一般指南(自以为是) 当可选依赖项添加新功能而不更改核心行为时,即,当更改纯粹是添加时,使用可选依赖项或多或少是可以的。但是,请记住,这对用户来说可能非常烦人,尤其是对于像
lwt
这样的核心包(可能涉及大量的重新编译和级联更改,甚至失败)。因此,最好不要使用此功能,而是坚持使用显式包管理代码库的不同功能部分的解决方案

如果可选依赖项更改了包的核心行为,即,如果它不是扩展,而是修改,则永远不应使用opam可选依赖项机制表示它,而应显式表示为单独的包或使用配置变量


1) 记住,最好的请求是pull请求:))

git clone https://github.com/ocaml/opam-repository
edit opam-repository/packages/<your-package-opam-file>
opam repo add fixed-deps ./opam-repository