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

Git post-merge钩子中npm run build脚本无法运行的原因排查

Git post-merge钩子中npm run build无法执行的排查与解决

先确认钩子是否正常运行

首先检查touch /home/jt/project/backend/backend/wsgi.py是否生效:查看该文件的修改时间是否与你执行git pull的时间一致。

  • 如果文件时间没变化,说明钩子根本没运行,优先处理权限问题:
    给post-merge脚本添加可执行权限:

    chmod +x ~/project/.git/hooks/post-merge
    
  • 如果文件时间有变化,说明钩子在运行,但npm run build执行失败或无输出,按以下步骤排查:


排查npm命令执行问题

1. 捕获错误输出

Git钩子默认会隐藏命令的标准错误输出,你可以修改脚本把日志写入文件,直接查看npm的报错信息:

#!/bin/sh
# 把npm的输出和错误都写入日志文件
/home/jt/nvm/versions/node/v18.12.0/bin/npm run build --prefix /home/jt/project/frontend >> /home/jt/npm-build.log 2>&1
# 打印npm的退出码,0表示成功,非0表示失败
echo "npm exit code: $?" >> /home/jt/npm-build.log
touch /home/jt/project/backend/backend/wsgi.py

执行git pull后,查看/home/jt/npm-build.log即可定位具体错误。

2. 检查环境变量差异

Git钩子的执行环境和你平时用的交互式shell不一样,可能缺少npm运行所需的环境变量。可以对比两种环境的变量:
修改钩子脚本打印环境变量:

#!/bin/sh
# 输出钩子的环境变量到文件
env >> /home/jt/hook-env.log
/home/jt/nvm/versions/node/v18.12.0/bin/npm run build --prefix /home/jt/project/frontend >> /home/jt/npm-build.log 2>&1
touch /home/jt/project/backend/backend/wsgi.py

然后在交互式shell里执行env >> /home/jt/shell-env.log,对比两个文件的差异,重点关注NODE_ENV、NODE_PATH等和Node/npm相关的变量,必要时在钩子脚本里手动添加缺失的变量。

3. 切换工作目录后执行npm

有时候--prefix参数可能不如直接切换工作目录可靠,修改脚本先进入frontend目录再执行命令:

#!/bin/sh
cd /home/jt/project/frontend || exit 1
/home/jt/nvm/versions/node/v18.12.0/bin/npm run build
touch /home/jt/project/backend/backend/wsgi.py

|| exit 1保证如果切换目录失败,脚本直接退出,避免后续命令执行出错。

4. 确认npm路径的有效性

虽然你用了绝对路径,但可以先验证该路径的npm是否能在钩子环境中正常运行:
在钩子脚本里添加测试命令:

#!/bin/sh
/home/jt/nvm/versions/node/v18.12.0/bin/npm --version >> /home/jt/npm-test.log
/home/jt/nvm/versions/node/v18.12.0/bin/npm run build --prefix /home/jt/project/frontend >> /home/jt/npm-build.log 2>&1
touch /home/jt/project/backend/backend/wsgi.py

如果npm --version能正常输出版本号,说明路径没问题;否则可能是该npm文件权限不足,或者Node版本在钩子环境中无法运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:50:26