You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS Ventura下Ionic Angular项目Node-20/npm10的node-gyp语法错误修复求助

问题:Node v20 + npm 10环境下Ionic Angular项目npm install失败(node-gyp语法错误)

在MacOS Ventura 13.3.1的Ionic Angular项目中,升级Node到v20.11.0、npm到10后,执行npm install时触发node-gyp语法错误,无法安装任何npm包。项目在Node v12.22.12(npm v6.14.16)环境可正常运行,目标是适配Node 16+、npm 8+环境。

错误日志

npm ERR! code 1
npm ERR! path /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass
npm ERR! command failed
npm ERR! command sh -c node scripts/build.js
npm ERR! Building: /Users/ashad/.nvm/versions/node/v20.11.0/bin/node /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp verb cli [
npm ERR! gyp verb cli   '/Users/ashad/.nvm/versions/node/v20.11.0/bin/node',
npm ERR! gyp verb cli   '/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/bin/node-gyp.js',
npm ERR! gyp verb cli   'rebuild',
npm ERR! gyp verb cli   '--verbose',
npm ERR! gyp verb cli   '--libsass_ext=',
npm ERR! gyp verb cli   '--libsass_cflags=',
npm ERR! gyp verb cli   '--libsass_ldflags=',
npm ERR! gyp verb cli   '--libsass_library='
npm ERR! gyp verb cli ]
npm ERR! gyp info using node-gyp@3.8.0
npm ERR! gyp info using node@20.11.0 | darwin | x64
npm ERR! gyp verb command rebuild []
npm ERR! gyp verb command clean []
npm ERR! gyp verb clean removing "build" directory
npm ERR! gyp verb command configure []
npm ERR! gyp verb check python checking for Python executable "python2" in the PATH
npm ERR! gyp verb `which` succeeded python2 /usr/local/bin/python2
npm ERR! gyp verb check python version `/usr/local/bin/python2 -c "import sys; print "2.7.17
npm ERR! gyp verb check python version .%s.%s" % sys.version_info[:3];"` returned: %j
npm ERR! gyp verb get node dir no --target version specified, falling back to host node version: 20.11.0
npm ERR! gyp verb command install [ '20.11.0' ]
npm ERR! gyp verb install input version string "20.11.0"
npm ERR! gyp verb install installing version: 20.11.0
npm ERR! gyp verb install --ensure was passed, so won't reinstall if already installed
npm ERR! gyp verb install version is already installed, need to check "installVersion"
npm ERR! gyp verb got "installVersion" 9
npm ERR! gyp verb needs "installVersion" 9
npm ERR! gyp verb install version is good
npm ERR! gyp verb get node dir target node version installed: 20.11.0
npm ERR! gyp verb build dir attempting to create "build" dir: /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass/build
npm ERR! gyp verb build dir "build" dir needed to be created? /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass/build
npm ERR! gyp verb build/config.gypi creating config file
npm ERR! gyp verb build/config.gypi writing out config file: /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass/build/config.gypi
npm ERR! gyp verb config.gypi checking for gypi file: /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass/config.gypi
npm ERR! gyp verb common.gypi checking for gypi file: /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass/common.gypi
npm ERR! gyp verb gyp gyp format was not specified; forcing "make"
npm ERR! gyp info spawn /usr/local/bin/python2
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   '/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args   'binding.gyp',
npm ERR! gyp info spawn args   '-f',
npm ERR! gyp info spawn args   'make',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass/build/config.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/Users/ashad/.node-gyp/20.11.0/include/node/common.gypi',
npm ERR! gyp info spawn args   '-Dlibrary=shared_library',
npm ERR! gyp info spawn args   '-Dvisibility=default',
npm ERR! gyp info spawn args   '-Dnode_root_dir=/Users/ashad/.node-gyp/20.11.0',
npm ERR! gyp info spawn args   '-Dnode_gyp_dir=/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp',
npm ERR! gyp info spawn args   '-Dnode_lib_file=/Users/ashad/.node-gyp/20.11.0/
npm ERR!     sys.exit(gyp.script_main())
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 545, in script_main
npm ERR!     return main(sys.argv[1:])
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 538, in main
npm ERR!     return gyp_main(args)
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 514, in gyp_main
npm ERR!     options.duplicate_basename_check)
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 130, in Load
npm ERR!     params['parallel'], params['root_targets'])
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 2783, in Load
npm ERR!     variables, includes, depth, check, True)
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 399, in LoadTargetBuildFile
npm ERR!     includes, True, check)
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 271, in LoadOneBuildFile
npm ERR!     aux_data, includes, check)
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 308, in LoadBuildFileIncludesIntoDict
npm ERR!     LoadOneBuildFile(include, data, aux_data, None, False, check),
npm ERR!   File "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 251, in LoadOneBuildFile
npm ERR!     None)
npm ERR!   File "/Users/ashad/.node-gyp/20.11.0/include/node/common.gypi", line 1
npm ERR!     incremental linking
npm ERR!                       ^
npm ERR! SyntaxError: invalid syntax
npm ERR! gyp ERR! configure error 
npm ERR! gyp ERR! stack Error: `gyp` failed with exit code: 1
npm ERR! gyp ERR! stack     at ChildProcess.onCpExit (/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/lib/configure.js:345:16)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:518:28)
npm ERR! gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:294:12)
npm ERR! gyp ERR! System Darwin 22.4.0
npm ERR! gyp ERR! command "/Users/ashad/.nvm/versions/node/v20.11.0/bin/node" "/Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm ERR! gyp ERR! cwd /Users/ashad/abdullahSalam/ioniceatonlineapp/node_modules/node-sass
npm ERR! gyp ERR! node -v v20.11.0
npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! gyp ERR! not ok 
npm ERR! Build failed with error code: 1

npm ERR! A complete log of this run can be found in: /Users/ashad/.npm/_logs/2024-02-01T09_21_26_284Z-debug-0.log

核心原因

错误根源是旧版node-sass依赖的node-gyp@3.8.0不兼容Node 16+版本,同时node-sass已停止维护,无法适配Node v20的新特性。


修复方案

方案1:替换node-sass为dart-sass(推荐)

dart-sass是官方推荐的sass替代方案,完全兼容Node 16+,且长期维护:

  • 卸载旧依赖:
    npm uninstall node-sass
    
  • 安装dart-sass:
    npm install sass --save-dev
    
  • 修改项目配置:将angular.json、组件样式引用中所有node-sass相关配置替换为sass。

方案2:升级node-gyp并适配Node版本

若必须保留node-sass,需升级node-gyp至兼容版本:

  • 清除缓存与旧依赖:
    rm -rf node_modules package-lock.json
    npm cache clean --force
    
  • 升级项目中的node-gyp:
    npm install node-gyp@latest --save-dev
    
  • 配置Python 3(Node 16+要求node-gyp使用Python 3):
    # 若未安装Python3,先通过brew安装
    brew install python3
    # 配置npm默认使用Python3
    npm config set python python3
    
  • 重新安装依赖:
    npm install
    

方案3:降级Node到16.x/18.x(过渡方案)

若上述方案暂时无法落地,可先切换到Node长期支持版:

  • 使用nvm切换版本:
    nvm install 18.19.0
    nvm use 18.19.0
    
  • 清除缓存后重新安装:
    rm -rf node_modules package-lock.json
    npm install
    

内容的提问来源于stack exchange,提问作者g.m.ashaduzzaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:09:59