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

将Cypress命令添加到husky pre-push时出现模块未找到错误

问题原因及解决办法

原因

Husky的pre-push钩子运行在非交互式shell环境中,不会自动加载用户的shell配置文件(比如~/.zshrc、~/.bash_profile),导致终端中存在的环境变量(如PATH、Cypress相关路径变量)没有被带入钩子环境。这会让Cypress无法正确解析缓存中的安装路径,出现错误里的路径重复(Cypress.app/Contents/MacOS/Contents/Resources),最终找不到指定模块。

解决方法

1. 在钩子中加载shell配置文件

修改.husky/pre-push,先加载你的shell配置,确保环境和终端一致:

  • 如果你用Zsh:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
source ~/.zshrc

npm run test
npm run test:e2e
  • 如果你用Bash:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
source ~/.bash_profile

npm run test
npm run test:e2e

2. 强制Cypress重新安装

在运行测试前先执行Cypress安装命令,确保路径正确:
修改.husky/pre-push:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run test
npx cypress install
npm run test:e2e

或者直接在package.json的test:e2e脚本中集成安装步骤:

{
  "scripts": {
    "test:e2e": "cypress install && cypress run"
  }
}

3. 手动指定Cypress缓存路径

通过环境变量CYPRESS_CACHE_FOLDER固定缓存位置,避免路径解析错误:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

export CYPRESS_CACHE_FOLDER="/Users/me/Library/Caches/Cypress"

npm run test
npm run test:e2e

4. 排查环境变量差异

如果以上方法无效,可以先打印钩子环境的信息,对比终端输出找差异:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

# 打印当前用户和PATH变量
whoami
echo $PATH

npm run test
npm run test:e2e

将钩子输出的PATH和终端中执行echo $PATH的结果对比,把缺失的路径补充到钩子的环境变量中。

内容的提问来源于stack exchange,提问作者Terrabythia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:18:19