Цитирование @npm_support по адресу:
https://twitter.com/npm_support/status/968195526989512705
2/2 Если вы хотите, чтобы избежать проблем при установке, связанные с зависимостями, один маршрут для вас, чтобы написать обертку, что требуется, как регулярную зависимость и убедиться, что она имеет optionalDeps
(а также убедитесь, что обертка проверяет, что у вас есть все необходимое для работы).
Но ИМХО это скорее похоже на обходное решение, чем решение проблемы на самом деле.
Я могу понять, что npm хочет сохранить переносимость и избегать использования специфики платформы, но это необходимо сделать в любом случае, и IMHO, выполняющее это во время выполнения, не является оптимальным (специальность, если вы хотите оптимизировать размер кода).
Итак, сегодня у меня нет оптимального решения для обмена, кроме открытого обсуждения предложения.
Невозможно поддерживать «условные зависимости» в npm?
Первое, что пришло мне в голову, заключалось в том, чтобы добавить раздел «переопределить», который изменит текущие разделенные секции (+ add, -remove, = replace).
Например:
dependencies: { "common-stuff": "*" } overrides: { "os: { linux: { dependencies: { "+best-linux-module" } } } }
И другой вариант предложенный разработчиком я знаю, было бы ввести обеспечивает ключевое слово, а затем несколько модулей может обеспечить тот же семантический, чем будет удовлетворено распознаватель (a la debian), но он генерирует подобные накладные расходы.
Я ищу общий подход, ориентированный не только на поддержку ОС, но и на другие варианты упаковки (в зависимости от двигателей, например).
Вы знаете какую-либо связанную с этим проблему в трекере NPM? если не я рассматриваю файл ошибка будет отслеживаться по адресу:
https://github.com/npm/npm/issues?q=dependencies+conditional
Обратная связь приветствовать на этой идее.
Хороший вопрос. Я знаю, что есть поле 'os' в [package.json] (https://npmjs.org/doc/json.html), но это не позволяет вам менять зависимости на основе текущей платформы - это просто объявляет, какие платформы пакет включен в белый список. Например, это свойство в 'package.json': ' "ОС": [ "! Win32", "Darwin"] ' означает "этот пакет не будет работать в окнах, но будет работать на Маках".К сожалению, это не совсем то, о чем вы просите. – smithclay
^Это проблема, если модуль dbus имеет собственные привязки, которые будут компилироваться только на определенной ОС ([как указано ниже в комментарии] (http://stackoverflow.com/questions/15176082/npm-package-json- os-specific-dependency # comment22801812_15670089)), его package.json должен включать это поле 'os'. –