在使用 Vercel 部署 Node.js 应用时,有时会遇到 devDependencies 模块安装失败的情况,导致应用无法正常构建或运行。
chou403
/ Vercel
/ c:
/ u:
/ 3 min read
一学一个不吱声
Vercel 部署时出现类似 husky: command not found 的错误。
husky 是一个工具,常用于 Git hooks 管理。如果在 Vercel 部署时出现 husky: command not found 的错误,说明部署环境中未正确安装 husky,通常是因为:
husky未包含在生产依赖中: Vercel 默认仅安装dependencies,而忽略devDependencies。- 部署过程中未安装依赖:
husky脚本在运行前需要正确安装依赖。
以下是解决方法:
1. 将 husky 添加到生产依赖
如果 husky 在项目中是必须的(即构建或运行过程中需要 Git hooks),将其移动到 dependencies 中:
npm install husky --save 修改后的 package.json:
{
"dependencies": {
"husky": "^8.0.0"
}
} 2. 禁用 Git hooks 在 CI/CD 中运行
在 Vercel 中的构建环境,Git hooks 通常是不需要运行的。可以通过以下方式禁用:
方法 1:设置环境变量
在 Vercel 项目的环境变量中,添加以下变量:
- Key:
HUSKY - Value:
0
方法 2:添加 .husky 跳过脚本
在 .husky/pre-commit 或 .husky/post-merge 文件开头添加:
if [ -z "$CI" ]; then
exit 0
fi $CI 环境变量在 Vercel 等 CI/CD 平台中会自动设置为 true。
3. 确保正确安装依赖
在 Vercel 部署时,默认仅安装生产依赖。如果 husky 仍在 devDependencies 中,确保安装所有依赖。
修改 vercel.json:
在 vercel.json 中添加以下配置:
{
"installCommand": "npm install --include=dev"
} 4. 验证 Husky 设置是否正确
确保 husky 的设置没有问题。以下是基本的配置步骤:
初始化 Husky
运行以下命令初始化 Husky:
npx husky-init && npm install 检查 .husky 文件夹
确保 .husky 文件夹中包含正确的 Git hooks(如 pre-commit)。
5. 最佳实践:排除非必要依赖
如果 husky 的 Git hooks 在部署时完全无关,可以通过调整脚本避免触发。例如,在 package.json 的 scripts 中改用以下方式:
"scripts": {
"prepare": "if [ -z \"$CI\" ]; then husky install; fi"
} 总结
- 如果
husky是构建必要依赖,将其移到dependencies。 - 如果 Git hooks 不需要在 Vercel 中运行,通过设置环境变量
HUSKY=0或修改脚本禁用它。 - 在 Vercel 中安装所有依赖时,确保配置
installCommand为npm install --include=dev。
devDependencies 中有很多依赖,每个都进行移动到 dependencies,设置变量,过于多此一举而且繁琐。采用解决方案 3 是最佳的,只需要添加一个文件,其他都不需要更改。