有没有办法让本机npm包依赖于特定版本的V8 C ++ API?

时间:2015-12-04 23:43:35

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

今天我发现在节点0.10.40上成功编译的旧版node-fiber和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库版本?

1 个答案:

答案 0 :(得分:0)

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

您可以指定您的资料所使用的节点版本:

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