当前位置: 首页 > article >正文

vscode .husky/pre-commit: line 4: npx: command not found

目录

  • 1. 修复 npx 路径问题(90% 的解决方案)
  • 2. 显式加载环境变量(nvm 用户必选)
  • 3. 修复全局 PATH 配置
  • 4. 重装 Husky 与钩子
  • 5. 使用 HUSKY_DEBUG 调试执行流程

🔧 核心解决方法(按优先级排序)

1. 修复 npx 路径问题(90% 的解决方案)

问题根源:
Husky 钩子脚本在非交互式 shell 中运行时未正确识别 npx 命令路径。

操作步骤:

# 查找当前 npx 实际路径
which npx# 替换 pre-commit 文件中的 npx 为完整路径
sed -i '' 's/npx/\/Users\/username\/.nvm\/versions\/node\/v18.12.1\/bin\/npx/g' .husky/pre-commit

✅ 注意:

  • 将路径替换为 which npx 的实际输出。
  • 若使用 nvm,确保路径指向当前激活的 Node 版本。

2. 显式加载环境变量(nvm 用户必选)

原因说明:
Husky 在 Git 提交钩子中运行时不会自动加载 .bashrc.zshrc,因此需要手动加载 nvm.sh

修改后的 .husky/pre-commit 示例:

#!/usr/bin/env sh
# 加载 nvm 环境(关键步骤)
[ -s "$HOME/.nvm/nvm.sh" ] && \. "$HOME/.nvm/nvm.sh". "$(dirname -- "$0")/_/husky.sh"# 执行 lint-staged 命令(使用绝对路径更可靠)
/Users/username/.nvm/versions/node/v18.12.1/bin/npx lint-staged

📌 建议:也可以将 npx lint-staged 替换为 node_modules/.bin/lint-staged 来避免依赖 npx


3. 修复全局 PATH 配置

适用场景:
VS Code 终端可能没有继承系统完整的 PATH,导致找不到 npx

操作步骤:

# 编辑 ~/.zshrc 或 ~/.bashrc 文件
echo 'export PATH="$HOME/.nvm/versions/node/v18.12.1/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

💡 提示:如果使用了 asdf 或其他版本管理器,请相应地调整 PATH


4. 重装 Husky 与钩子

适用情况:
.husky 目录或钩子文件损坏时,建议彻底重建。

操作命令:

# 删除旧配置
rm -rf .git/hooks .husky# 初始化 Husky
npx husky-init# 安装依赖并启用钩子
npm install

⚠️ 注意:重新初始化后需手动添加如 npx lint-staged.husky/pre-commit 文件中。


5. 使用 HUSKY_DEBUG 调试执行流程

目的:
查看 Husky 钩子执行时的具体行为,便于排查错误。

操作步骤:

# 开启调试模式
export HUSKY_DEBUG=1# 再次尝试提交代码,观察日志输出
git commit -m "test"

🧪 输出内容可帮助你确认是否加载了正确的 Node 环境、是否调用了 lint-staged 等。


⚠️ 辅助验证步骤

  1. 检查文件权限:

    chmod +x .husky/pre-commit
    
  2. 验证 Node 和 npm 版本:

    node -v
    npm -v
    

    推荐使用 Node ≥ v16,以确保支持 npx

  3. 测试 npx 是否可用:

    npx lint-staged --version
    

💎 总结优先级

  1. 修正 npx 路径(直接解决命令缺失)
  2. 显式加载 nvm 环境(解决 PATH 继承问题)
  3. 🔁 重装 Husky(排除配置损坏)
  4. 🛠️ 调试执行流程(定位深层原因)

📌 相关链接

  • Husky 官方文档
  • lint-staged GitHub
  • nvm 安装指南

http://www.lryc.cn/news/2402794.html

相关文章:

  • 光电耦合器:数字时代的隐形守护者
  • FPGA没有使用的IO悬空对漏电流有没有影响
  • 11. vue pinia 和react redux、jotai对比
  • 手机如何防止ip关联?3种低成本方案
  • Pandas和Django的示例Demo
  • 护网行动面试试题(1)
  • 【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE
  • 航道无人机巡检系统
  • 【JVM】Java虚拟机(一)——内存结构
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)
  • 《Linux运维总结:宝德服务器RAID开启(方式一)》
  • NY118NY120美光固态闪存NY124NY129
  • Odoo 19 路线图(新功能)
  • 基于NXP例程学习CAN UDS刷写流程
  • RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)
  • Python训练第四十三天
  • 基于有效集MPC控制算法的直线同步电机simulink建模与仿真,MPC使用S函数实现
  • 让敏感数据在流转与存储中始终守护在安全范围
  • 【Linux】find 命令详解及使用示例:递归查找文件和目录
  • Java转Go日记(五十九):参数验证
  • 机器学习与深度学习14-集成学习
  • MySQL数据库表设计与索引优化终极指南
  • 【论文阅读笔记】万花筒:用于异构多智能体强化学习的可学习掩码
  • 负载均衡LB》》HAproxy
  • Vue 中组件命名与引用
  • UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误
  • 在uni-app中如何从Options API迁移到Composition API?
  • Rust 控制流
  • 【Linux基础知识系列】第十三篇-Cron与定时任务管理
  • Visual Studio 中的 MD、MTD、MDD、MT 选项详解