Подтвердить что ты не робот

Специфическая зависимость ОС npm package.json

Можно ли указать конкретные зависимости ОС в файле npm package.json?

Например, я хотел бы установить 'dbus' (https://npmjs.org/package/dbus) в качестве зависимости для моего модуля, если пользователь работает под управлением Linux. У меня была бы другая зависимость для Mac и Windows.

4b9b3361

Ответ 1

В этом может быть хороший способ сделать это, в зависимости от вашей настройки.

npm package.json поддерживает os ключ, а также optionalDependencies

os может использоваться, чтобы указать, на какой ОС может быть установлен модуль. optionalDependencies являются зависимостями модулей, которые, если они не могут быть установлены, npm пропускает их и продолжает установку.

Таким образом, ваш модуль может иметь необязательную зависимость для каждой ОС, и будет загружен/установлен только тот, который работает /. ^

РЕДАКТИРОВАТЬ: Как упоминает @Sebastien ниже, этот подход опасен. Для любой данной ОС по крайней мере одна из ваших зависимостей "требуется", а остальная "необязательная". Предоставление всех версий зависимостей необязательно означает, что если ваша установка завершится неудачно по уважительной причине, она молча пропустит установку, и вам не понадобится зависимость, которая вам действительно нужна.

Ответ 2

Я думаю, что короткий ответ - нет. Я могу подумать о нескольких обходных решениях - самое простое - просто добавить все к package.json независимо от ОС, а затем require() правильный во время выполнения.

Если это не сработает для вас, вы можете использовать установку script, чтобы получить результат, который вы собираетесь использовать - https://docs.npmjs.com/misc/scripts

Я не тестировал это, но думаю, что это сработает:

Добавьте в свой пакет package.json что-то подобное:

,"scripts": {
  "install": "node install_dependencies.js"
}

Затем добавьте файл install_dependencies.js, который проверяет ОС и запускает соответствующие команды npm install ....

Ответ 3

Также существует модуль bindings-shyp: https://www.npmjs.org/package/bindings-shyp

Вспомогательный модуль для загрузки собственного файла .node модуля.

Это вспомогательный модуль для авторов встроенных модулей аддонов Node.js. Это, в основном, "швейцарский армейский нож", требующий() вашего собственного файла .node модуля.

В ходе истории родных аддонов Node аддоны были скомпилированы в разных местах, в зависимости от того, какой инструмент сборки и какая версия Node была использована. Хуже того, теперь инструмент построения gyp может создавать либо сборку Release, либо Debug, каждый из которых встроен в разные места.

Этот модуль проверяет все возможные местоположения, в которые будет встроен собственный аддон, и возвращает первую, которая успешно загружается.