【问题标题】:Is there a way for native npm packages to depend on a specific version of the V8 C++ API?有没有办法让原生 npm 包依赖于特定版本的 V8 C++ API?
【发布时间】:2016-03-10 00:50:57
【问题描述】:

今天我发现在节点 0.10.40 上成功编译的旧版本 node-fibers 和 bcrypt 在节点 5.1.0 上编译不成功。

例如,如果我尝试编译 bcrypt 0.7.8,我得到的错误肯定是由于 V8 API 的变化:

> bcrypt@0.7.8 install /Users/andy/jcore-portal/target/device/dist/bundle/node_modules/bcrypt
> node-gyp rebuild

  CXX(target) Release/obj.target/bcrypt_lib/src/blowfish.o
  CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt.o
  CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt_node.o
../src/bcrypt_node.cc:54:18: error: no member named 'Dispose' in
      'v8::Persistent<v8::Function, v8::NonCopyablePersistentTraits<v8::Function>
      >'
        callback.Dispose();
        ~~~~~~~~ ^
../src/bcrypt_node.cc:128:19: error: unknown type name 'uv_work_t'
void GenSaltAsync(uv_work_t* req) {

...

显然bcrypt 无法确定 V8 API 是不兼容的版本。我也没有在package.jsonnode-gyp 配置中看到任何似乎适用的字段。这是它的构建脚本中的一个错误,还是仅仅因为包无法确定 V8 库版本?

【问题讨论】:

  • 看起来bcryptnan 依赖版本已修复,而不是使用插入符号,以便自动获取较新(向后兼容)的版本。您应该考虑在他们的 GH 问题跟踪器上提交问题和/或提交 PR 以添加插入符号。

标签: c++ node.js v8 node-gyp node.js-addon


【解决方案1】:

https://docs.npmjs.com/files/package.json#engines

你可以指定你的东西工作的节点版本:

{
... 
  "engines" : { 
    "node" : ">=0.10.3 <0.12" 
  }
}

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 2016-01-05
    • 2018-05-02
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多