VPS修改Next.js路径后Yarn1编译canvas报node-pre-gyp: not found问询
问题原因
node-pre-gyp: not found报错是Yarn 1无法找到canvas包依赖的原生代码构建工具导致的,结合修改项目存放路径的场景,具体触发原因分为三类:
- 路径关联缓存失效:Yarn 1的全局缓存机制会将原生模块的编译结果和原项目绝对路径绑定,修改项目存放路径后,原缓存关联的路径作废,Yarn不会自动重新安装
node-pre-gyp这个canvas的前置构建依赖。 - 本地依赖软链接失效:原有
node_modules目录下的二进制执行文件、软链接大多采用原路径的绝对地址硬编码,目录修改后软链接指向的地址不存在,canvas的构建脚本调用node-pre-gyp时就会触发未找到错误。 - 系统依赖缺失触发本地编译 fallback:如果你的VPS上缺少canvas运行依赖的原生系统库(libpng、libjpeg、pango等),Yarn拉取预编译的canvas二进制包失败后会自动切换到本地编译模式,该模式必须依赖
node-pre-gyp,如果依赖树中没有该包就会直接报错。
修复方案
- 先删除原有
node_modules目录和yarn.lock文件,清除旧的路径绑定缓存:rm -rf node_modules yarn.lock - 全局安装
node-pre-gyp避免依赖查找失败:npm install -g node-pre-gyp - 安装canvas需要的系统依赖(以Debian/Ubuntu系系统为例):
sudo apt install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev - 重新执行
yarn install安装依赖即可。
内容的提问来源于stack exchange,提问作者Matchu
相关产品推荐
相关产品推荐

