Технически это возможно, поскольку opam предоставляет достаточно возможностей для упаковщика, чтобы предоставить пользователю полный контроль над конфигурацией пакета. На практике он используется редко, если вообще используется.
Параметры упаковщика
В качестве сопровождающего пакета вы можете использовать глобальные конфигурации и параметры коммутатора, чтобы пользователи могли сами выбирать, какие дополнительные части вашего пакета им нужны. В качестве альтернативы, вы можете ввести дополнительный пакет моста между необязательной зависимостью и вашим пакетом, чтобы разорвать жесткое соединение, например, вместо перенастройки lwt
, когда присутствует react
, его можно перенастроить, только если псевдопакет, например, conf-lwt-enbale-react
установлено, что, в свою очередь, зависит от пакета react
.
Параметры пользователя
Если пакет, в котором вы заинтересованы, не обеспечивает достаточного контроля для вас, то у вас есть несколько обходных путей, но в идеале вы должны связаться с сопровождающим пакета спросьба исправить вашу посылку 1 . В любом случае вам следует принять роль упаковщика, хотя бы временного.
Первый вариант - загрузить исходный код пакета, изменить файл opam и закрепить фиксированную версию, например,
* 1018. *
где <lwt-source>
- имя каталога, в который opam source
загрузил код souce.
Альтернативным решением было бы скопировать репозиторий opam, исправить его там, а затем добавить свойхранилище для opam, например,
git clone https://github.com/ocaml/opam-repository
edit opam-repository/packages/<your-package-opam-file>
opam repo add fixed-deps ./opam-repository
Общее руководство для упаковщиков (самоуверенное)
Когда необязательная зависимость добавляет новые функциональные возможности, без изменения поведения ядра, т.е. когда изменение является чисто аддитивнымболее или менее нормально использовать необязательные зависимости. Однако помните, что это может сильно раздражать пользователей, особенно для таких базовых пакетов, как lwt
(что может включать в себя тонны перекомпиляции и каскад изменений или даже сбоев). Поэтому лучше воздержаться от использования этой функции и придерживаться решения, которое использует явные пакеты, которые управляют различными функциональными частями вашей кодовой базы.
Если необязательная зависимость изменяет поведение ядра вашего пакета, т. Е. Если это не расширение, а модификация, то ее никогда не следует представлять с помощью необязательного механизма зависимостей opam, а вместо этого явно обозначать как отдельнуюпакет или с помощью переменных конфигурации.
1) Помните, что лучшим запросом является запрос на извлечение :)).