Отключить опциональную установку зависимостей в ocaml opam - PullRequest
2 голосов
/ 23 октября 2019

Документы говорят:

Пакет также может иметь дополнительные зависимости. Это зависимости, которые может использовать пакет, но они не являются обязательными. Они не будут установлены вместе с пакетом по умолчанию, но при установке opam они будут использованы, если они уже установлены во время установки пакета, который по выбору зависит от них. Например, если вы устанавливаете реакцию перед установкой lwt, установка opam lwt настроит lwt на использование реакции, но простая установка lwt не установит реакцию.

Можно ли как-то отключить это? Используя этот пример реакции и lwt, несмотря на то, что у меня установлен ceat, я не хочу, чтобы lwt был настроен с реакцией при последующей установке lwt.

1 Ответ

1 голос
/ 24 октября 2019

Технически это возможно, поскольку 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) Помните, что лучшим запросом является запрос на извлечение :)).

...