部署了strapi的服务器内存满了,优化清空的时候删了些东西,最后发现,竟导致整个Strapi项目构建失败,最后发现是因为删除了/root/.npm导致的。
问题现场:删除.npm后的灾难性报错
当在服务器上执行完rm -rf ~/.npm
以清理磁盘空间,过了几天Strapi项目修改需要重启的时候,在项目中运行yarn install
,终端突然抛出一连串红色错误:
bash
复制
下载
less
"@strapi/strapi > @strapi/admin > use-context-selector@1.4.1" has unmet peer dependency "scheduler@>=0.19.0".
warning " > strapi-plugin-transformer@3.1.2" has unmet peer dependency "lodash@^4.17.21".
warning " > strapi-plugin-transformer@3.1.2" has unmet peer dependency "yup@^0.32.9".
warning " > styled-components@5.3.3" has unmet peer dependency "react-is@>= 16.8.0".
warning "styled-components > babel-plugin-styled-components > @babel/plugin-syntax-jsx@7.27.1" has unmet peer dependency "@babel/core@^7.0.0-0".
[5/5] Building fresh packages...
[6/10] ⠁ sharp
[10/10] ⠁ sqlite3
[8/10] ⠁ better-sqlite3
[9/10] ⠁ sharp
error /home/service/cms/web_tsinghua_cms/node_modules/@strapi/plugin-upload/node_modules/sharp: Command failed.
Exit code: 1
Command: (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
Arguments:
Directory: /home/service/cms/web_tsinghua_cms/node_modules/@strapi/plugin-upload/node_modules/sharp
Output:
...
尽管网络通畅,sharp模块安装依然失败,导致整个Strapi项目无法启动。更令人困惑的是,同一命令在其它服务器却执行正常。
一、解剖问题:为什么删除.npm会引发sharp安装失败?
1. npm缓存的核心作用
~/.npm
目录是npm的全局缓存仓库,存储着:
- 下载过的所有包(
_cacache
目录) - 预编译的二进制模块(如sharp的本地编译版本)
- 包元数据及签名信息8
当执行npm install
或yarn install
时,系统优先检查缓存,若存在匹配版本则直接使用缓存包,避免重复下载和编译6。
2. Sharp模块的特殊性
Sharp是一个高性能图像处理库:
- 依赖预编译的C++库(libvips)
- 安装时会下载平台特定的二进制文件(Linux/macOS/Windows)
- 若缓存不存在,自动触发本地编译(需Python/C++编译环境)1
二、终极修复方案
直接从另一个服务器拷贝了一份具有相同环境的 /root/.npm,并且把服务的gcc、g++、glibc都重新升级以后好了。