Vercel部署Next.js应用时出现mozjpeg命令执行失败报错如何解决?
问题根因
构建失败与moment依赖、图片引用路径无关,核心报错来自mozjpeg包安装环节:Vercel默认构建环境缺少ZLIB 1.2.9、nasm等底层系统依赖,无法编译imagemin-mozjpeg所需的二进制文件,最终触发构建中断。
解决方案(按优先级排序)
方案1:替换为Next.js原生图片优化能力(最稳定)
你使用的Next.js 11已经内置成熟的图片优化能力,无需依赖第三方next-optimized-images插件,改造成本最低:
- 卸载冗余依赖
npm uninstall imagemin-mozjpeg imagemin-optipng next-optimized-images react-optimized-image lqip-loader webp-loader
- 修改
next.config.js配置,合并重复的webpack逻辑,将图片域名配置迁移到原生字段:
const nextConfig = { images: { domains: ["mars.nasa.gov", "www.nasaspaceflight.com"], }, webpack: (config, { dev, isServer }) => { if (isServer) { require("./scripts/sitemap-common"); } // 客户端生产构建替换React为Preact逻辑保留 if (!dev && !isServer) { Object.assign(config.resolve.alias, { react: "preact/compat", "react-dom/test-utils": "preact/test-utils", "react-dom": "preact/compat", }); } return config; }, }; module.exports = nextConfig;
- 页面内原有优化图片组件替换为Next.js原生
next/image即可,public目录的图片直接用根路径引用。
方案2:锁定兼容版本的mozjpeg
如果需要保留next-optimized-images的现有功能,可强制锁定低版本兼容的mozjpeg:
- 如果你使用yarn,在
package.json中新增resolutions字段:
"resolutions": { "mozjpeg": "7.1.0" }
- 如果你使用npm,在
package.json中新增overrides字段:
"overrides": { "mozjpeg": "7.1.0" }
- 删除
node_modules和 lock文件后重新安装依赖,再提交部署即可。
方案3:临时禁用图片压缩(适合紧急上线)
在next-optimized-images配置中新增关闭压缩的参数,跳过mozjpeg编译环节:
// next.config.js中plugins部分修改为 [ optimizedImages, { optimizeImages: false, domains: ["mars.nasa.gov", "www.nasaspaceflight.com"], }, ]
内容的提问来源于stack exchange,提问作者Vincenzo
相关产品推荐
相关产品推荐

