Mac zsh创建SolidJS报zlib: unexpected end of file怎么办
报错核心诱因
! zlib: unexpected end of file 本质是zlib解压压缩包时,拿到的文件不完整、被截断触发的解压失败,在Mac + zsh环境下执行degit命令时的常见触发原因有三类:
- degit本地缓存、npm缓存中留存了之前网络波动时下载的残缺模板压缩包,每次执行命令优先读取缓存里的坏包,导致持续报错
- 终端网络请求被代理、防火墙拦截篡改,gzip压缩的响应内容被截断,degit拿到的源文件本身就是损坏的
- 本地npx/degit版本过旧、node版本低于16,或者npm缓存目录权限异常,导致下载压缩包时写入不完整就提前触发了解压流程
分步排查解决
按从易到难顺序操作,每步做完可以重试degit solidjs/templates/js my-app验证效果:
- 清理所有损坏缓存
先删除degit本地模板缓存,再强制清空npm缓存,避免读取旧的损坏包:
不要直接用npx拉起临时版本的degit,先全局安装最新稳定版,避免npx拉到存在兼容bug的旧版degit:rm -rf ~/.degit npm cache clean --forcenpm install -g degit@latest - 排查网络拦截问题
- 如果当前开了终端代理、网络抓包工具,先临时关闭重试;如果必须走代理,确认代理的HTTP/HTTPS环境变量配置正确,没有请求半连接中断的问题
- 可以尝试拉取其他公开模板验证故障范围,比如执行
degit sveltejs/template test-demo,如果同样报zlib错误,可确定是本地网络/缓存问题,和SolidJS模板本身无关
- 修复环境与权限问题
- 执行
node -v确认本地node版本≥16.x,版本过低的话升级到长期支持版即可 - 执行以下命令修复npm缓存目录的用户权限,避免权限不足导致包写入截断:
sudo chown -R $(whoami) ~/.npm - 执行
which degit确认调用的是全局安装的最新版degit,排除zsh别名、旧版本软链接的干扰
- 执行
- 兜底替代方案
如果以上步骤都无法解决,可以直接跳过degit,用git拉取模板源码,最终效果和degit拉取完全一致:git clone https://github.com/solidjs/templates.git solid-temp cp -r solid-temp/js my-app rm -rf solid-temp my-app/.git cd my-app && npm install
内容的提问来源于stack exchange,提问作者Sammy
相关产品推荐
相关产品推荐

