Специфическая зависимость ОС npm package.json
Можно ли указать конкретные зависимости ОС в файле npm package.json?
Например, я хотел бы установить 'dbus' (https://npmjs.org/package/dbus) в качестве зависимости для моего модуля, если пользователь работает под управлением Linux. У меня была бы другая зависимость для Mac и Windows.
Ответы
Ответ 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, каждый из которых встроен в разные места.
Этот модуль проверяет все возможные местоположения, в которые будет встроен собственный аддон, и возвращает первую, которая успешно загружается.