Home
img of docs

在使用 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,通常是因为:

  1. husky 未包含在生产依赖中: Vercel 默认仅安装 dependencies,而忽略 devDependencies
  2. 部署过程中未安装依赖: 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.jsonscripts 中改用以下方式:

   "scripts": {
  "prepare": "if [ -z \"$CI\" ]; then husky install; fi"
}

总结

  • 如果 husky 是构建必要依赖,将其移到 dependencies
  • 如果 Git hooks 不需要在 Vercel 中运行,通过设置环境变量 HUSKY=0 或修改脚本禁用它。
  • 在 Vercel 中安装所有依赖时,确保配置 installCommandnpm install --include=dev

devDependencies 中有很多依赖,每个都进行移动到 dependencies,设置变量,过于多此一举而且繁琐。采用解决方案 3 是最佳的,只需要添加一个文件,其他都不需要更改。