添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Based on Automattic/node-canvas#1868 (comment) ,
I have forked the npm canvas library to https://github.com/assembleco/node-canvas ,
and am replacing nan using node-addon-api .

I am going from nan @2.15.0 to node-addon-api @4.2.0 .
I ran the conversion tool, and obeyed everything in the setup doc .

When I run yarn ,

gyp info using [email protected] gyp info using [email protected] | darwin | x64 gyp info spawn make gyp info spawn args [ ' BUILDTYPE=Release ' , ' -C ' , ' build ' ] SOLINK_MODULE(target) Release/canvas-postbuild.node CXX(target) Release/obj.target/canvas/src/backend/Backend.o ../src/backend/Backend.cc:4:10: error: constructor for ' Backend ' must explicitly initialize the base class ' Napi::ObjectWrap<Backend> ' which does not have a default constructor Backend::Backend(std::string name, int width, int height) ../node_modules/node-addon-api/napi.h:2046:9: note: ' Napi::ObjectWrap<Backend> ' declared here class ObjectWrap : public InstanceWrap < T > , public Reference < Object > { ../src/backend/Backend.cc:18:76: error: member reference base type ' uint32_t ' (aka ' unsigned int ' ) is not a structure or union if (info[0].IsNumber()) width = info[0].As<Napi::Number>().Uint32Value ().FromMaybe(0); ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ ../src/backend/Backend.cc:19:76: error: member reference base type ' uint32_t ' (aka ' unsigned int ' ) is not a structure or union if (info[1].IsNumber()) height = info[1].As<Napi::Number>().Uint32Value ().FromMaybe(0); ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ ../src/backend/Backend.cc:23:12: error: no member named ' Wrap ' in ' Backend ' backend->Wrap(info.This ()); ~ ~~~~~~ ^ ../src/backend/Backend.cc:24:3: error: void function 'init' should not return a value [-Wreturn-type] return info.This (); ^ ~ ~~~~~~~~~~ In file included from ../src/backend/Backend.cc:1: ../src/backend/Backend.h:60:14: warning: private field ' backend ' is not used [-Wunused-private-field] Backend * backend ; 1 warning and 5 errors generated. make: *** [Release/obj.target/canvas/src/backend/Backend.o] Error 1 gyp ERR ! build error gyp ERR ! stack Error: ` make ` failed with exit code: 2 gyp ERR ! stack at ChildProcess.onExit (/Users/grace/.nvm/versions/node/v12.22.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23) gyp ERR ! stack at ChildProcess.emit (events.js:314:20) gyp ERR ! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:276:12) gyp ERR ! System Darwin 19.6.0 gyp ERR ! command " /Users/grace/.nvm/versions/node/v12.22.1/bin/node " " /Users/grace/.nvm/versions/node/v12.22.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js " " build " " --fallback-to-build " " --module=/Users/grace/place/assemble/node-canvas/build/Release/canvas.node " " --module_name=canvas " " --module_path=/Users/grace/place/assemble/node-canvas/build/Release " " --napi_version=8 " " --node_abi_napi=napi " " --napi_build_version=0 " " --node_napi_label=node-v72 " gyp ERR ! cwd /Users/grace/place/assemble/node-canvas gyp ERR ! node -v v12.22.1 gyp ERR ! node-gyp -v v5.1.0 gyp ERR ! not ok node-pre-gyp ERR ! build error node-pre-gyp ERR ! stack Error: Failed to execute ' /Users/grace/.nvm/versions/node/v12.22.1/bin/node /Users/grace/.nvm/versions/node/v12.22.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/grace/place/assemble/node-canvas/build/Release/canvas.node --module_name=canvas --module_path=/Users/grace/place/assemble/node-canvas/build/Release --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v72 ' (1) node-pre-gyp ERR ! stack at ChildProcess. < anonymous > (/Users/grace/place/assemble/node-canvas/node_modules/@mapbox/node-pre-gyp/lib/util/compile.js:89:23) node-pre-gyp ERR ! stack at ChildProcess.emit (events.js:314:20) node-pre-gyp ERR ! stack at maybeClose (internal/child_process.js:1022:16) node-pre-gyp ERR ! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:287:5) node-pre-gyp ERR ! System Darwin 19.6.0 node-pre-gyp ERR ! command " /Users/grace/.nvm/versions/node/v12.22.1/bin/node " " /Users/grace/place/assemble/node-canvas/node_modules/.bin/node-pre-gyp " " install " " --fallback-to-build " node-pre-gyp ERR ! cwd /Users/grace/place/assemble/node-canvas node-pre-gyp ERR ! node -v v12.22.1 node-pre-gyp ERR ! node-pre-gyp -v v1.0.8 node-pre-gyp ERR ! not ok

This is a bunch, but I hope it's clear where the problem is coming from;
seems like the Backend constructor
is missing some setup code.

I can't quite figure out what code should go in this constructor, because it doesn't share the same structure as other constructors in the codebase, like Canvas ,
which uses an ::Initialize function instead of a constructor.

I'm out of my depth here; though I do need a running copy of canvas using the node-addon-api .
If anyone has experience with this error, please recommend an approach.

I'm much obliged.

Hi @c4lliope ,

If you look at the ObjectWrap example , you need to pass the CallbackInfo argument to the ObjectWrap constructor.

Does this help?