Как уведомить NPM о зависимости от нативной библиотеки C ++? - PullRequest
0 голосов
/ 04 ноября 2018

Скажем, у меня есть динамическая библиотека C ++ 'MyLib', включающая публичные заголовки, которая будет устанавливать в определенные для платформы папки / пути по умолчанию. У меня также есть пакет NPM, который создает собственное расширение узла «MyLib.node» с использованием node-gyp, которое включает функциональность «MyLib».

Может быть, есть способ изящно уведомить NPM о том, что этот пакет зависит от библиотеки 'MyLib', используя package.json вместо того, чтобы позволить ему сбоить во время сборки? Или мне нужно пойти по другому пути, например, сделать из него полноценный установочный пакет для конкретной платформы (чего, надеюсь, нет, потому что мне так нравится кросс-платформенность)

1 Ответ

0 голосов
/ 04 ноября 2018

Короче говоря: нет, сам NPM не имеет такой функции.

Существуют различные методы для удовлетворения требований нативной библиотеки:

  • Используйте что-то вроде node-pre-gyp для загрузки предварительно скомпилированных двоичных файлов, с откатом к компиляции, если для рассматриваемой платформы нет двоичного файла. Этот метод используется, например, sqlite3 и canvas.
  • Поставляется с кодом C / C ++ как частью пакета и компилируется во время установки. Этот метод используется, например, leveldown и libjpeg.
  • Существуют также пакеты, которые требуют установки библиотек отдельно, например, qrcodeine. Установка этого пакета завершится с ошибкой компиляции, если одна из его обязательных библиотек не установлена.

Недостаток последнего метода, за исключением простого сбоя с ошибкой, заключается в том, что он затрудняет управление версиями. Если MyLib активно разрабатывается и регулярно изменяется, вы можете столкнуться с проблемой, что зависящий от него модуль Node может быть устаревшим по отношению к (глобально установленной) версии библиотеки.

...