Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

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

nan_callbacks.h:55:23: error: ‘AccessorSignature’ is not a member of ‘v8’ #942

Closed
Abdullah-Albinali opened this issue Aug 4, 2022 · 16 comments · Fixed by #943
Closed

Comments

@Abdullah-Albinali
Copy link

i am not sure i am posting this in the correct place, but i am facing the below issue and i am not sure how to proceed further on this.

appreciate any push in the right direction.

⠙ Building module: node-pty, Completed: 0In file included from ../../nan/nan.h:180,
                 from ../src/unix/pty.cc:20:
../../nan/nan_callbacks.h:55:23: error: ‘AccessorSignature’ is not a member of ‘v8’
   55 | typedef v8::Local<v8::AccessorSignature> Sig;
      |                       ^~~~~~~~~~~~~~~~~
../../nan/nan_callbacks.h:55:40: error: template argument 1 is invalid
   55 | typedef v8::Local<v8::AccessorSignature> Sig;
      | 
@westlakem
Copy link

westlakem commented Aug 12, 2022

Same problem when trying to compile for Electron v20

Building module: fsuipc, Completed: 0D:\devl\electron\fsecosystem\node_modules\nan\nan_callbacks.h(55,23): error C2039: 'AccessorSignature': is not a member of 'v8' [D:\devl\electron\fsecosystem\node_modules\fsuipc\build\fsuipc.vcxproj]
C:\Users\Matt\.electron-gyp\20.0.1\include\node\v8.h(71): message : see declaration of 'v8' [D:\devl\electron\fsecosystem\node_modules\fsuipc\build\fsuipc.vcxproj]

@nikitakot
Copy link

nikitakot commented Aug 17, 2022

same problem, using electron-rebuild to rebuild a native module which uses nan for Electron v20 and getting nan_callbacks.h(55,23): error C2039: 'AccessorSignature': is not a member of 'v8' and similar errors related to AccessorSignature

"electron": "20.0.2" (V8 10.4, Node.js 16.15.0, Chromium 104)
"nan": "2.16.0
"electron-rebuild": "3.2.9"

@RaisinTen
Copy link

A PR has already been sent to fix this - #941.

@chouzz
Copy link

chouzz commented Aug 19, 2022

A PR has already been sent to fix this - #941.

Confirmed, this PR fix my problem when rebuild electron with node-pty.

@Abdullah-Albinali
Copy link
Author

confirmed as well! thank!

@RaisinTen
Copy link

Let's keep this open for now. It will get closed automatically when the PR lands!

@alejandroclaro
Copy link

In case someone is looking for workarounds until this is fixed, take a look to: electron/electron#35193

@RichardFoss
Copy link

I am using a midi package. Recently I updated to node v 18.10.0 and nw v0.69.1. When I rebuild:
nw-gyp rebuild --target=0.69.1 --arch=x64
I get:
../../nan/nan_callbacks.h:55:23: error: no member named 'AccessorSignature' in namespace 'v8'
typedef v8::Localv8::AccessorSignature Sig;

I have looked at various resolutions to the issue in this thread. I have tried putting this into the midi package.json:
"overrides": {
"nan": "github:jkleinsc/nan#remove_accessor_signature"
},
But still get the same message. Any suggestions?

@alejandroclaro
Copy link

@RichardFoss I didn't follow that approach and it works in my case. This is what I did:

  1. Add a resolution into the package.json (in the root of the repository if it's a monorepo):
    image

  2. Add patch-package package to apply a patch after npm install:

  "scripts": {
    "postinstall": "patch-package || true",
  },
  "devDependencies": {
    "patch-package": "^6.4.7",
  },
  1. Create or add the following patch (patches/nan+2.16.0.patch):
diff --git a/node_modules/nan/nan.h b/node_modules/nan/nan.h
index 9e7c59e..0326246 100644
--- a/node_modules/nan/nan.h
+++ b/node_modules/nan/nan.h
@@ -2516,8 +2516,7 @@ inline void SetAccessor(
   , SetterCallback setter = 0
   , v8::Local<v8::Value> data = v8::Local<v8::Value>()
   , v8::AccessControl settings = v8::DEFAULT
-  , v8::PropertyAttribute attribute = v8::None
-  , imp::Sig signature = imp::Sig()) {
+  , v8::PropertyAttribute attribute = v8::None) {
   HandleScope scope;
 
   imp::NativeGetter getter_ =
@@ -2550,9 +2549,6 @@ inline void SetAccessor(
     , obj
     , settings
     , attribute
-#if (NODE_MODULE_VERSION < NODE_18_0_MODULE_VERSION)
-    , signature
-#endif
   );
 }
 
diff --git a/node_modules/nan/nan_callbacks.h b/node_modules/nan/nan_callbacks.h
index 53ede84..ea81e45 100644
--- a/node_modules/nan/nan_callbacks.h
+++ b/node_modules/nan/nan_callbacks.h
@@ -52,8 +52,6 @@ typedef void(*IndexQueryCallback)(
     const PropertyCallbackInfo<v8::Integer>&);
 
 namespace imp {
-typedef v8::Local<v8::AccessorSignature> Sig;
-
 static const int kDataIndex =                    0;
 
 static const int kFunctionIndex =                1;

@RichardFoss
Copy link

Thanks for this comprehensive comment! I have gone down a different path now after feedback from the midi group. I am using an updated midi implementation - read here - https://github.com/julusian/node-midi#readme, and this is working well for me! The nan issue is not present with this implementation.

@zzikkzzakk
Copy link

zzikkzzakk commented Feb 1, 2023

This solved it for me
https://stackoverflow.com/questions/61657685/npm-doesnt-install-node-gyp-error-class-v8object-has-no-member-named-for

npm install -g npm-check-updates
npm-check-updates -u
npm install

It just upgrades the libraries in package.json to the latest versions

@idemax
Copy link

idemax commented Apr 5, 2023

same here :/

@Stepan-Petei
Copy link

@RichardFoss I didn't follow that approach and it works in my case. This is what I did:

  1. Add a resolution into the package.json (in the root of the repository if it's a monorepo):
    image
  2. Add patch-package package to apply a patch after npm install:
  "scripts": {
    "postinstall": "patch-package || true",
  },
  "devDependencies": {
    "patch-package": "^6.4.7",
  },
  1. Create or add the following patch (patches/nan+2.16.0.patch):
diff --git a/node_modules/nan/nan.h b/node_modules/nan/nan.h
index 9e7c59e..0326246 100644
--- a/node_modules/nan/nan.h
+++ b/node_modules/nan/nan.h
@@ -2516,8 +2516,7 @@ inline void SetAccessor(
   , SetterCallback setter = 0
   , v8::Local<v8::Value> data = v8::Local<v8::Value>()
   , v8::AccessControl settings = v8::DEFAULT
-  , v8::PropertyAttribute attribute = v8::None
-  , imp::Sig signature = imp::Sig()) {
+  , v8::PropertyAttribute attribute = v8::None) {
   HandleScope scope;
 
   imp::NativeGetter getter_ =
@@ -2550,9 +2549,6 @@ inline void SetAccessor(
     , obj
     , settings
     , attribute
-#if (NODE_MODULE_VERSION < NODE_18_0_MODULE_VERSION)
-    , signature
-#endif
   );
 }
 
diff --git a/node_modules/nan/nan_callbacks.h b/node_modules/nan/nan_callbacks.h
index 53ede84..ea81e45 100644
--- a/node_modules/nan/nan_callbacks.h
+++ b/node_modules/nan/nan_callbacks.h
@@ -52,8 +52,6 @@ typedef void(*IndexQueryCallback)(
     const PropertyCallbackInfo<v8::Integer>&);
 
 namespace imp {
-typedef v8::Local<v8::AccessorSignature> Sig;
-
 static const int kDataIndex =                    0;
 
 static const int kFunctionIndex =                1;

how to add this patch and where?

@jaroslaw-weber
Copy link

still happens when tried to move to pnpm...

@tuwilof
Copy link

tuwilof commented Oct 12, 2023

It works for me if I use yarn

yarn add nan 

peterkos added a commit to peterkos/tree-sitter-swift that referenced this issue Nov 7, 2023
alex-pinkus pushed a commit to alex-pinkus/tree-sitter-swift that referenced this issue Nov 7, 2023
@Cheprer
Copy link

Cheprer commented Nov 17, 2023

If someone is wondering Node.JS 20 build failure use similar approach as above with updated version since some package did not update it on their latest like: sharp

  "resolutions": {
    "nan": "2.18.0"
  },

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet