You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:45:50