在使用 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 是最佳的,只需要添加一个文件,其他都不需要更改。