直面した問題
・npm installができない
環境
- macOS: Sequoia 15.6 (Darwin 24.6.0)
- Node.js: v20.18.0
- canvas: v2.11.2
出ていたエラー内容
npm install
npm warn deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm warn deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm warn deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
npm error code 1
npm error path /Users/yukanakamura/Work/my-project/node_modules/canvas
npm error command failed
npm error command sh -c node-pre-gyp install --fallback-to-build --update-binary
npm error SOLINK_MODULE(target) Release/canvas-postbuild.node
npm error CXX(target) Release/obj.target/canvas/src/backend/Backend.o
npm error Failed to execute '/Users/yukanakamura/.nvm/versions/node/v20.18.0/bin/node /Users/yukanakamura/.nvm/versions/node/v20.18.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --update-binary --module=/Users/yukanakamura/Work/my-project/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/Users/yukanakamura/Work/my-project/node_modules/canvas/build/Release --napi_version=9 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v115' (1)
npm error node-pre-gyp info it worked if it ends with ok
npm error node-pre-gyp info using node-pre-gyp@1.0.9
npm error node-pre-gyp info using node@20.18.0 | darwin | arm64
npm error node-pre-gyp http GET https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v115-darwin-unknown-arm64.tar.gz
npm error 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-v115-darwin-unknown-arm64.tar.gz
npm error node-pre-gyp WARN Pre-built binaries not installable for canvas@2.11.2 and node@20.18.0 (node-v115 ABI, unknown) (falling back to source compile with node-gyp)
npm error 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-v115-darwin-unknown-arm64.tar.gz
npm error gyp info it worked if it ends with ok
npm error gyp info using node-gyp@10.1.0
npm error gyp info using node@20.18.0 | darwin | arm64
npm error gyp info ok
npm error gyp info it worked if it ends with ok
npm error gyp info using node-gyp@10.1.0
npm error gyp info using node@20.18.0 | darwin | arm64
npm error gyp info find Python using Python version 3.11.4 found at "/Users/yukanakamura/.pyenv/versions/3.11.4/bin/python3"
npm error gyp info spawn /Users/yukanakamura/.pyenv/versions/3.11.4/bin/python3
npm error gyp info spawn args [
npm error gyp info spawn args '/Users/yukanakamura/.nvm/versions/node/v20.18.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm error gyp info spawn args 'binding.gyp',
npm error gyp info spawn args '-f',
npm error gyp info spawn args 'make',
npm error gyp info spawn args '-I',
npm error gyp info spawn args '/Users/yukanakamura/Work/my-project/node_modules/canvas/build/config.gypi',
npm error gyp info spawn args '-I',
npm error gyp info spawn args '/Users/yukanakamura/.nvm/versions/node/v20.18.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm error gyp info spawn args '-I',
npm error gyp info spawn args '/Users/yukanakamura/Library/Caches/node-gyp/20.18.0/include/node/common.gypi',
npm error gyp info spawn args '-Dlibrary=shared_library',
npm error gyp info spawn args '-Dvisibility=default',
npm error gyp info spawn args '-Dnode_root_dir=/Users/yukanakamura/Library/Caches/node-gyp/20.18.0',
npm error gyp info spawn args '-Dnode_gyp_dir=/Users/yukanakamura/.nvm/versions/node/v20.18.0/lib/node_modules/npm/node_modules/node-gyp',
npm error gyp info spawn args '-Dnode_lib_file=/Users/yukanakamura/Library/Caches/node-gyp/20.18.0/<(target_arch)/node.lib',
npm error gyp info spawn args '-Dmodule_root_dir=/Users/yukanakamura/Work/my-project/node_modules/canvas',
npm error gyp info spawn args '-Dnode_engine=v8',
npm error gyp info spawn args '--depth=.',
npm error gyp info spawn args '--no-parallel',
npm error gyp info spawn args '--generator-output',
npm error gyp info spawn args 'build',
npm error gyp info spawn args '-Goutput_dir=.'
npm error gyp info spawn args ]
npm error gyp info ok
npm error gyp info it worked if it ends with ok
npm error gyp info using node-gyp@10.1.0
npm error gyp info using node@20.18.0 | darwin | arm64
npm error gyp info spawn make
npm error gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
npm error In file included from ../src/backend/Backend.cc:1:
npm error ../src/backend/Backend.h:5:10: fatal error: 'exception' file not found
npm error 5 | #include <exception>
npm error | ^~~~~~~~~~~
npm error 1 error generated.
npm error make: *** [Release/obj.target/canvas/src/backend/Backend.o] Error 1
npm error gyp ERR! build error
npm error gyp ERR! stack Error: `make` failed with exit code: 2
npm error gyp ERR! stack at ChildProcess.<anonymous> (/Users/yukanakamura/.nvm/versions/node/v20.18.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:209:23)
npm error gyp ERR! System Darwin 24.6.0
npm error gyp ERR! command "/Users/yukanakamura/.nvm/versions/node/v20.18.0/bin/node" "/Users/yukanakamura/.nvm/versions/node/v20.18.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--update-binary" "--module=/Users/yukanakamura/Work/my-project/node_modules/canvas/build/Release/canvas.node" "--module_name=canvas" "--module_path=/Users/yukanakamura/Work/my-project/node_modules/canvas/build/Release" "--napi_version=9" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v115"
npm error gyp ERR! cwd /Users/yukanakamura/Work/my-project/node_modules/canvas
npm error gyp ERR! node -v v20.18.0
npm error gyp ERR! node-gyp -v v10.1.0
npm error gyp ERR! not ok
npm error node-pre-gyp ERR! build error
npm error node-pre-gyp ERR! stack Error: Failed to execute '/Users/yukanakamura/.nvm/versions/node/v20.18.0/bin/node /Users/yukanakamura/.nvm/versions/node/v20.18.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --update-binary --module=/Users/yukanakamura/Work/my-project/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/Users/yukanakamura/Work/my-project/node_modules/canvas/build/Release --napi_version=9 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v115' (1)
npm error node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/Users/yukanakamura/Work/my-project/node_modules/@mapbox/node-pre-gyp/lib/util/compile.js:89:23)
npm error node-pre-gyp ERR! stack at ChildProcess.emit (node:events:519:28)
npm error node-pre-gyp ERR! stack at maybeClose (node:internal/child_process:1105:16)
npm error node-pre-gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:305:5)
npm error node-pre-gyp ERR! System Darwin 24.6.0
npm error node-pre-gyp ERR! command "/Users/yukanakamura/.nvm/versions/node/v20.18.0/bin/node" "/Users/yukanakamura/Work/my-project/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build" "--update-binary"
npm error node-pre-gyp ERR! cwd /Users/yukanakamura/Work/my-project/node_modules/canvas
npm error node-pre-gyp ERR! node -v v20.18.0
npm error node-pre-gyp ERR! node-pre-gyp -v v1.0.9
npm error node-pre-gyp ERR! not ok
npm error A complete log of this run can be found in: /Users/yukanakamura/.npm/_logs/2025-10-16T01_46_16_280Z-debug-0.log
原因
npm error ../src/backend/Backend.h:5:10: fatal error: 'exception' file not found
npm error 5 | #include <exception>
解決方法
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
まとめ
canvasはネイティブパッケージで、C++のコンパイラが必要だったけど、
コンパイラが壊れていたから再インストールしたら治った
Macのバージョンアップの際に壊れる場合があるらしい