Linux Mint安装scratch-www遇node-pre-gyp错误的解决求助
解决scratch-www(c01438b版本)npm install时的canvas编译错误
问题根源
canvas@2.9.0发布时未适配Node.js 20.x版本,官方无对应预编译二进制包;源码编译时,Node.js 20的v8引擎API(如v8::AccessorSignature)已发生变更,导致旧版本canvas的编译代码无法兼容。
解决方案
方案1:降级Node.js到兼容版本(推荐)
canvas@2.9.0对Node.js 18.x版本有完整支持,操作步骤如下:
- 安装nvm(Node版本管理器):
git clone https://github.com/nvm-sh/nvm.git ~/.nvm cd ~/.nvm && git checkout v0.39.7 source ~/.nvm/nvm.sh echo "source ~/.nvm/nvm.sh" >> ~/.bashrc - 重启终端后,切换到Node.js 18:
nvm install 18 nvm use 18 - 重新执行scratch-www的安装命令:
npm install
方案2:安装系统编译依赖并手动patch代码(复杂,不推荐)
若坚持使用Node.js 20,需先安装编译canvas所需的系统依赖,再修改canvas代码适配v8 API:
- 安装系统依赖:
sudo apt-get update && sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev - 执行
npm install触发源码编译,失败后进入node_modules/canvas/src目录 - 找到包含
v8::AccessorSignature的文件(如Canvas.cc),修改相关代码:- 将
static v8::AccessorSignature* canvas_accessor_signature = nullptr;替换为static v8::Local<v8::FunctionTemplate> canvas_function_template; - 将后续使用
canvas_accessor_signature的地方替换为canvas_function_template->Signature()
- 将
- 重新编译canvas:
npm rebuild canvas@2.9.0
注意事项
scratch-www的c01438b版本依赖的canvas版本较陈旧,长期建议升级scratch-www至更新版本,以原生支持Node.js 20。
内容的提问来源于stack exchange,提问作者Sigge
相关产品推荐
相关产品推荐

