nan icon indicating copy to clipboard operation
nan copied to clipboard

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

Open Abdullah-Albinali opened this issue 2 years ago • 6 comments

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;
      | 

Abdullah-Albinali avatar Aug 04 '22 18:08 Abdullah-Albinali

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]

westlakem avatar Aug 12 '22 18:08 westlakem

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"

nikitakot avatar Aug 17 '22 11:08 nikitakot

A PR has already been sent to fix this - https://github.com/nodejs/nan/pull/941.

RaisinTen avatar Aug 18 '22 08:08 RaisinTen

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

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

chouzz avatar Aug 19 '22 07:08 chouzz

confirmed as well! thank!

Abdullah-Albinali avatar Aug 19 '22 09:08 Abdullah-Albinali

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

RaisinTen avatar Aug 19 '22 09:08 RaisinTen

In case someone is looking for workarounds until this is fixed, take a look to: https://github.com/electron/electron/issues/35193

alejandroclaro avatar Oct 07 '22 11:10 alejandroclaro

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?

RichardFoss avatar Oct 07 '22 14:10 RichardFoss

@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;

alejandroclaro avatar Oct 07 '22 19:10 alejandroclaro

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.

RichardFoss avatar Oct 08 '22 17:10 RichardFoss

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

zzikkzzakk avatar Feb 01 '23 20:02 zzikkzzakk

same here :/

idemax avatar Apr 05 '23 17:04 idemax

@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?

Stepan-Petei avatar May 01 '23 21:05 Stepan-Petei

still happens when tried to move to pnpm...

jaroslaw-weber avatar Sep 21 '23 01:09 jaroslaw-weber

It works for me if I use yarn

yarn add nan 

tuwilof avatar Oct 12 '23 17:10 tuwilof

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"
  },

Cheprer avatar Nov 17 '23 10:11 Cheprer