Husky prepare脚本执行失败导致Firebase函数部署异常
解决Firebase部署时Husky Prepare脚本报错问题
我在npm项目里把husky配置成了prepare脚本,项目的package.json内容如下:
{ "name": "functions", "scripts": { "build": "tsc", "start": "npm run serve", "deploy": "firebase deploy --only functions", "prepare": "husky install functions/.husky" }, "dependencies": { "firebase-admin": "^11.4.1", "firebase-functions": "^4.1.1" }, "devDependencies": { "husky": "^8.0.2", "typescript": "^4.9.4" } }
因为husky只用于本地开发,不需要部署环境支持,所以我把它放在了devDependencies里。但执行npm run deploy部署Firebase函数时,构建失败了,错误信息如下:
i functions: updating Node.js 16 function funName(us-central1)... Build failed: > prepare > husky install functions/.husky sh: 1: husky: not found npm ERR! code 127 npm ERR! path /workspace npm ERR! command failed npm ERR! command sh -c -- husky install functions/.husky
问题出在Firebase的部署环境不会安装devDependencies里的包,所以prepare脚本执行时找不到husky。
解决办法:写一个条件执行的prepare脚本
创建prepare.js文件,判断当前环境是否为本地开发环境,只在本地执行husky安装命令:
const { execSync } = require('child_process'); try { // 识别是否为部署环境:Firebase部署时会设置FIREBASE_CI为true,或者NODE_ENV为production const isDeploymentEnv = process.env.FIREBASE_CI === 'true' || process.env.NODE_ENV === 'production'; if (!isDeploymentEnv) { execSync('husky install functions/.husky', { stdio: 'inherit' }); console.log('Husky 已成功安装'); } else { console.log('部署环境下跳过Husky安装'); } } catch (err) { console.error('Prepare脚本执行出错:', err.message); process.exit(1); }
接着修改package.json里的prepare脚本,改为执行这个js文件:
{ "scripts": { "build": "tsc", "start": "npm run serve", "deploy": "firebase deploy --only functions", "prepare": "node prepare.js" } }
这样本地开发时会正常安装husky,而Firebase部署时会跳过这一步,就不会再出现找不到husky的错误了。
内容的提问来源于stack exchange,提问作者atulgpt
相关产品推荐
相关产品推荐

