如何通知 NPM 对本机 C++ 库的依赖?

Howto notify NPM of dependency on native C++ library?

假设我有一个动态 C++ 库 'MyLib',包括 public headers,它将安装到平台特定的默认值 folders/paths。 我还有一个 NPM 包,它使用 node-gyp 构建本机节点扩展 'MyLib.node',它包装了 'MyLib'.

的功能

有没有办法优雅地通知 NPM 这个包依赖于 'MyLib' 库,使用 package.json,而不是让它在构建过程中惨败?或者我必须走另一条路,比如把它变成一个 full-blown 平台特定的安装包(我希望不会,因为我非常喜欢 cross-platforminess)

简而言之:不,NPM本身没有这样的功能。

有多种方法可以处理原生库需求:

  • 使用 node-pre-gyp to download precompiled binaries, with fallback to compilation if there is no binary available for the platform in question. This method is used by, for instance, sqlite3 and canvas.
  • 将 C/C++ 代码作为包的一部分发布,并在安装期间进行编译。例如,leveldown and libjpeg.
  • 使用此方法
  • 还有一些包需要单独安装库,例如qrcodeine。如果未安装其必备库之一,安装此软件包将失败并出现编译错误。

最后一种方法的缺点,除了因错误而失败外,还在于它使版本控制变得困难。如果 MyLib 正在积极开发并定期更改,您可能会 运行 遇到这样的问题,即依赖于它的 Node 模块相对于库的(全局安装的)版本可能已过时。