大家好:
我是烤鸭,今天分享一个node项目打包失败的问题。
1. 问题复现
之前一直出现node项目打包失败的情况,使用测试环境的jenkins没问题,生产的有问题。基本可以排除代码层面的问题。
报错信息如图。另外说一下出现了 connect ECONNREFUSED XXX,打包没停止,说明不是这个问题导致的失败(Error)。
2. 猜想问题来源
猜测可能是环境问题,Linux 服务器系统不一致,或者node 版本不一致导致的,又或者 mozjpeg 这个包有什么特殊。
质量同事反馈这个就是因为代码问题,跳过测试打包:
mozjpeg pre-build test failed
这个实在不知道怎么跳过了,因为测试环境是ok的,也没有打印这个,同样的命令和脚本。
后来我仔细看了一下日志,发现报错跟 几个目录有关。
./node_modules/image-webpack-loadernode_modules/mozjpeg/vendornode_modules/optipng-bin/vendor/optipng
后来把测试环境打包jenkins的node-modules 这几个目录和生产的比较了一下,发现了一点问题。
这个 node_modules/optipng-bin 目录,生产和测试相差了 一个 vendor 目录。
3. 解决方案
把测试的vendor 目录拷贝到生产的jenkins打包npm生成node-modules的对应目录下就可以了。怀疑是 npm的时候链接失败,导致下载包失败(缺少文件)
这种问题不太好找原因,就算找到了也不太好解决,不能每次加完了包都手动拷贝到生产环境,先算作临时解决方案吧。