vercel / ncc

Compile a Node.js project into a single file. Supports TypeScript, binary addons, dynamic requires.
https://npmjs.com/@vercel/ncc
MIT License
8.99k stars 285 forks source link

Unclear instructions to build ncc from source. #1198

Open gl-yziquel opened 3 weeks ago

gl-yziquel commented 3 weeks ago

I like to build from source. Even js code. I tried it here, somewhat naively. I would have loved more explicit instructions.

I get:

mini-me@virtucon ~/h/c/ncc (main) [1]> yarn install                                                                     
yarn install v1.22.21                                                                                                                                                                                                                         [1/4] Resolving packages...                                                                                            
[2/4] Fetching packages...                                 
[3/4] Linking dependencies...                                                                                                                                                                                                                 
warning Workspaces can only be enabled in private projects.                                                                                                                                                                                   
[4/4] Building fresh packages...                                                                                       
[-/15] ⡀ waiting...                                                                                                    
[7/15] ⡀ canvas                                                                                                                                                                                                                               [-/15] ⢀ waiting...                                                                                                                                                                                                                           
[11/15] ⢀ unix-dgram                                                                                                                                                                                                                          
warning Error running install script for optional dependency: "/home/mini-me/home/cellar/ncc/node_modules/unix-dgram: Command failed.                                                                                                         
Exit code: 1                                                                                                                                                                                                                                  
Command: node-gyp rebuild                                                                                              
Arguments:                                                                                                             
Directory: /home/mini-me/home/cellar/ncc/node_modules/unix-dgram                                                                                                                                                                              
Output:                                                                                                                
gyp info it worked if it ends with ok                                                                                                                                                                                                         
gyp info using node-gyp@9.4.0                                                                                                                                                                                                                 
gyp info using node@22.2.0 | linux | x64                                                                               
(node:2459526) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead. 
(Use `node --trace-deprecation ...` to show where the warning was created)                                             
gyp info find Python using Python version 3.12.2 found at \"/home/mini-me/.pyenv/versions/3.12.2/bin/python3\"                                                                                                                                
gyp info spawn /home/mini-me/.pyenv/versions/3.12.2/bin/python3                                                        
gyp info spawn args [                                                                                                  
gyp info spawn args   '/home/mini-me/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',                                                                                                                                              
gyp info spawn args   'binding.gyp',                                                                                                                                                                                                          
gyp info spawn args   '-f',                                                                                                                                                                                                                   
gyp info spawn args   'make',                                                                                                                                                                                                                 
gyp info spawn args   '-I',                                                                                            
gyp info spawn args   '/home/mini-me/home/cellar/ncc/node_modules/unix-dgram/build/config.gypi',                                                                                                                                              
gyp info spawn args   '-I',                                                                                                                                                                                                                   gyp info spawn args   '/home/mini-me/.config/yarn/global/node_modules/node-gyp/addon.gypi',                                                                                                                                                   
gyp info spawn args   '-I',                                                                                                                                                                                                                   
gyp info spawn args   '/home/mini-me/.cache/node-gyp/22.2.0/include/node/common.gypi',                                 
gyp info spawn args   '-Dlibrary=shared_library',                                                                      
gyp info spawn args   '-Dvisibility=default',                                                                          
gyp info spawn args   '-Dnode_root_dir=/home/mini-me/.cache/node-gyp/22.2.0',                                          
gyp info spawn args   '-Dnode_gyp_dir=/home/mini-me/.config/yarn/global/node_modules/node-gyp',                                                                                                                                               gyp info spawn args   '-Dnode_lib_file=/home/mini-me/.cache/node-gyp/22.2.0/<(target_arch)/node.lib',                                                                                                                                         gyp info spawn args   '-Dmodule_root_dir=/home/mini-me/home/cellar/ncc/node_modules/unix-dgram',                       
gyp info spawn args   '-Dnode_engine=v8',                                                                                                                                                                                                     
gyp info spawn args   '--depth=.',                                                                                     
gyp info spawn args   '--no-parallel',                                                                                                                                                                                                        
gyp info spawn args   '--generator-output',                                                                                                                                                                                                   
gyp info spawn args   'build',                                                                                         
gyp info spawn args   '-Goutput_dir=.'                                                                                                                                                                                                        
gyp info spawn args ]                                                                                                  
gyp info spawn make                                                                                                                                                                                                                           
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]                                                             
make: Entering directory '/home/mini-me/home/cellar/ncc/node_modules/unix-dgram/build'                                                                                                                                                        
  CXX(target) Release/obj.target/unix_dgram/src/unix_dgram.o                                                                                                                                                                                  
In file included from ../src/unix_dgram.cc:5:                                                                          
../../nan/nan.h: In function ‘void Nan::SetAccessor(v8::Local<v8::ObjectTemplate>, v8::Local<v8::String>, GetterCallback, SetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, imp::Sig)’:                         
../../nan/nan.h:2546:19: error: no matching function for call to ‘v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>&, void (*&)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&), void (*&)(v8::Local<v8::Name>, v8::Local
<v8::Value>, const v8::PropertyCallbackInfo<void>&), v8::Local<v8::Object>&, v8::AccessControl&, v8::PropertyAttribute&)’
 2546 |   tpl->SetAccessor(                                                                                            
      |   ~~~~~~~~~~~~~~~~^                                
 2547 |       name                                         
      |       ~~~~                                         
 2548 |     , getter_                                      
      |     ~~~~~~~~~                                      
 2549 |     , setter_                                      
      |     ~~~~~~~~~                                      
 2550 |     , obj                                          
      |     ~~~~~                                          
 2551 |     , settings                                     
      |     ~~~~~~~~~~                                     
 2552 |     , attribute                                    
      |     ~~~~~~~~~~~                                    
 2553 | #if (NODE_MODULE_VERSION < NODE_16_0_MODULE_VERSION)                                                           
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                           
 2554 |     , signature                                    
      |     ~~~~~~~~~~~                                    
 2555 | #endif                                             
      | ~~~~~~                                             
 2556 |   );                                               
      |   ~
[...]
In file included from /home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-array-buffer.h:12,                          
                 from /home/mini-me/.cache/node-gyp/22.2.0/include/node/v8.h:24:                                       
/home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-local-handle.h: In instantiation of ‘v8::Local<T>::Local(v8::Local<S>) [with S = v8::Data; T = v8::Value]’:                                                                              
../../nan/nan_callbacks_12_inl.h:175:53:   required from here                                                          
/home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-local-handle.h:269:42: error: static assertion failed: type check 
  269 |     static_assert(std::is_base_of<T, S>::value, \"type check\");                                               
      |                                          ^~~~~     
/home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-local-handle.h:269:42: note: ‘std::integral_constant<bool, false>::value’ evaluates to false                                                                                             
make: *** [unix_dgram.target.mk:108: Release/obj.target/unix_dgram/src/unix_dgram.o] Error 1                           
make: Leaving directory '/home/mini-me/home/cellar/ncc/node_modules/unix-dgram/build'                                  
gyp ERR! build error                                                                                                   
gyp ERR! stack Error: `make` failed with exit code: 2                                                                  
gyp ERR! stack     at ChildProcess.onExit (/home/mini-me/.config/yarn/global/node_modules/node-gyp/lib/build.js:203:23)                                                                                                                       
gyp ERR! stack     at ChildProcess.emit (node:events:520:28)                                                                                                                                                                                  
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:294:12)                                                                                                                                                        
gyp ERR! System Linux 6.5.0-28-generic                                                                                                                                                                                                        
gyp ERR! command \"/home/mini-me/.local/share/nvm/v22.2.0/bin/node\" \"/home/mini-me/.yarn/bin/node-gyp\" \"rebuild\"  
gyp ERR! cwd /home/mini-me/home/cellar/ncc/node_modules/unix-dgram                                                     
[-/15] ⠄ waiting...                                                                                                                                                                                                                           
[7/15] ⠄ canvas                                                                                                        
[-/15] ⡀ waiting...                                                                                                    
[-/15] ⡀ waiting...                                                                                                                                                                                                                           
error /home/mini-me/home/cellar/ncc/node_modules/canvas: Command failed.                                               
Exit code: 1                                               
Command: node-pre-gyp install --fallback-to-build --update-binary                                                      
Arguments:                                                                                                                                                                                                                                    
Directory: /home/mini-me/home/cellar/ncc/node_modules/canvas                                                           
Output:                                                                                                                
node-pre-gyp info it worked if it ends with ok                                                                                                                                                                                                
node-pre-gyp info using node-pre-gyp@1.0.5                                                                                                                                                                                                    
node-pre-gyp info using node@22.2.0 | linux | x64                                                                                                                                                                                             
(node:2459510) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.                                                                                                                  
(Use `node --trace-deprecation ...` to show where the warning was created)                                             
node-pre-gyp http GET https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v127-linux-glibc-x64.tar.gz                                                                                                     
node-pre-gyp ERR! install response status 404 Not Found on https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v127-linux-glibc-x64.tar.gz                                                                
node-pre-gyp WARN Pre-built binaries not installable for canvas@2.11.2 and node@22.2.0 (node-v127 ABI, glibc) (falling back to source compile with node-gyp)                                                                                  
node-pre-gyp WARN Hit error response status 404 Not Found on https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v127-linux-glibc-x64.tar.gz                                                              
gyp info it worked if it ends with ok                      
gyp info using node-gyp@9.4.0                                                                                          
gyp info using node@22.2.0 | linux | x64                                                                               
gyp info ok                                                                                                            
gyp info it worked if it ends with ok                      
gyp info using node-gyp@9.4.0                                                                                                                                                                                                                 
gyp info using node@22.2.0 | linux | x64                   
(node:2459593) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead. 
(Use `node --trace-deprecation ...` to show where the warning was created)                                             
gyp info find Python using Python version 3.12.2 found at "/home/mini-me/.pyenv/versions/3.12.2/bin/python3"                                                                                                                                  
gyp info spawn /home/mini-me/.pyenv/versions/3.12.2/bin/python3
gyp info spawn args [                                                                                                  
gyp info spawn args   '/home/mini-me/home/cellar/ncc/node_modules/node-gyp/gyp/gyp_main.py',                           
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',                                
gyp info spawn args   'make',
gyp info spawn args   '-I',                                
gyp info spawn args   '/home/mini-me/home/cellar/ncc/node_modules/canvas/build/config.gypi',                           
gyp info spawn args   '-I',                                
gyp info spawn args   '/home/mini-me/home/cellar/ncc/node_modules/node-gyp/addon.gypi',                                
gyp info spawn args   '-I',                                
gyp info spawn args   '/home/mini-me/.cache/node-gyp/22.2.0/include/node/common.gypi',                                 
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/mini-me/.cache/node-gyp/22.2.0',                                          
gyp info spawn args   '-Dnode_gyp_dir=/home/mini-me/home/cellar/ncc/node_modules/node-gyp',                            
gyp info spawn args   '-Dnode_lib_file=/home/mini-me/.cache/node-gyp/22.2.0/<(target_arch)/node.lib',                  
gyp info spawn args   '-Dmodule_root_dir=/home/mini-me/home/cellar/ncc/node_modules/canvas',                           
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]                                      
gyp info ok                                                
gyp info it worked if it ends with ok
gyp info using node-gyp@9.4.0
gyp info using node@22.2.0 | linux | x64
gyp info spawn make                                        
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/mini-me/home/cellar/ncc/node_modules/canvas/build'                                     
  SOLINK_MODULE(target) Release/obj.target/canvas-postbuild.node                                                       
  COPY Release/canvas-postbuild.node
  CXX(target) Release/obj.target/canvas/src/backend/Backend.o                                                          
In file included from ../src/backend/Backend.h:6,
                 from ../src/backend/Backend.cc:1:
../../nan/nan.h: In function ‘void Nan::SetAccessor(v8::Local<v8::ObjectTemplate>, v8::Local<v8::String>, GetterCallback, SetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, imp::Sig)’:
../../nan/nan.h:2546:19: error: no matching function for call to ‘v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>&, void (*&)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&), void (*&)(v8::Local<v8::Name>, v8::Local
<v8::Value>, const v8::PropertyCallbackInfo<void>&), v8::Local<v8::Object>&, v8::AccessControl&, v8::PropertyAttribute&)’
 2546 |   tpl->SetAccessor(                                
      |   ~~~~~~~~~~~~~~~~^                                
 2547 |       name                                         
      |       ~~~~                                         
 2548 |     , getter_                                      
      |     ~~~~~~~~~                                      
 2549 |     , setter_                                      
      |     ~~~~~~~~~                                      
 2550 |     , obj                                          
      |     ~~~~~                                          
 2551 |     , settings                                     
      |     ~~~~~~~~~~                                     
 2552 |     , attribute                                    
      |     ~~~~~~~~~~~                                    
 2553 | #if (NODE_MODULE_VERSION < NODE_16_0_MODULE_VERSION)                                                           
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                           
 2554 |     , signature                                    
      |     ~~~~~~~~~~~                                    
 2555 | #endif                                             
      | ~~~~~~                                             
 2556 |   );                                               
      |   ~                                                
[...]
In file included from /home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-array-buffer.h:12,                          
                 from /home/mini-me/.cache/node-gyp/22.2.0/include/node/v8.h:24:                                       
/home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-local-handle.h: In instantiation of ‘v8::Local<T>::Local(v8::Local<S>) [with S = v8::Data; T = v8::Value]’:
../../nan/nan_callbacks_12_inl.h:175:53:   required from here                                                          
/home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-local-handle.h:269:42: error: static assertion failed: type check 
  269 |     static_assert(std::is_base_of<T, S>::value, "type check");                                                 
      |                                          ^~~~~
/home/mini-me/.cache/node-gyp/22.2.0/include/node/v8-local-handle.h:269:42: note: ‘std::integral_constant<bool, false>::value’ evaluates to false
make: *** [canvas.target.mk:159: Release/obj.target/canvas/src/backend/Backend.o] Error 1                              
make: Leaving directory '/home/mini-me/home/cellar/ncc/node_modules/canvas/build'                                      
gyp ERR! build error                                       
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/mini-me/home/cellar/ncc/node_modules/node-gyp/lib/build.js:203:23)    
gyp ERR! stack     at ChildProcess.emit (node:events:520:28)                                                           
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:294:12)                                 
gyp ERR! System Linux 6.5.0-28-generic
gyp ERR! command "/home/mini-me/.local/share/nvm/v22.2.0/bin/node" "/home/mini-me/home/cellar/ncc/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--update-binary" "--module=/home/mini-me/home/cellar/ncc/node_modules/
canvas/build/Release/canvas.node" "--module_name=canvas" "--module_path=/home/mini-me/home/cellar/ncc/node_modules/canvas/build/Release" "--napi_version=9" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v127"
gyp ERR! cwd /home/mini-me/home/cellar/ncc/node_modules/canvas                                                         
gyp ERR! node -v v22.2.0                                   
gyp ERR! node-gyp -v v9.4.0                                
gyp ERR! not ok                                            
node-pre-gyp ERR! build error 
node-pre-gyp ERR! stack Error: Failed to execute '/home/mini-me/.local/share/nvm/v22.2.0/bin/node /home/mini-me/home/cellar/ncc/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --update-binary --module=/home/mini-me/home/ce
llar/ncc/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/home/mini-me/home/cellar/ncc/node_modules/canvas/build/Release --napi_version=9 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-
v127' (1)                                                  
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/home/mini-me/home/cellar/ncc/node_modules/@mapbox/node-pre-gyp/lib/util/compile.js:89:23)
node-pre-gyp ERR! stack     at ChildProcess.emit (node:events:520:28)                                                  
node-pre-gyp ERR! stack     at maybeClose (node:internal/child_process:1105:16)                                        
node-pre-gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:305:5)                         
node-pre-gyp ERR! System Linux 6.5.0-28-generic
node-pre-gyp ERR! command "/home/mini-me/.local/share/nvm/v22.2.0/bin/node" "/home/mini-me/home/cellar/ncc/node_modules/canvas/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build" "--update-binary"
node-pre-gyp ERR! cwd /home/mini-me/home/cellar/ncc/node_modules/canvas                                                
node-pre-gyp ERR! node -v v22.2.0
node-pre-gyp ERR! node-pre-gyp -v v1.0.5
node-pre-gyp ERR! not ok                                   
Failed to execute '/home/mini-me/.local/share/nvm/v22.2.0/bin/node /home/mini-me/home/cellar/ncc/node_modules/node-gyp 
styfle commented 2 weeks ago

I think newer Node.js versions are failing in CI right now.

You can try Node.js 18 since that was passing https://github.com/vercel/ncc/actions/runs/7873890228/job/21482233308