运行 npm 如何通过 git 部署项目? (hooks/post-receive:npm:找不到命令)
How run npm on deploy project via git? (hooks/post-receive: npm: command not found)
问题
我创建了一个项目,其中使用 Apache 和 Git.
在 DigitalOcean 中配置服务器
对于服务器上的初始化项目,我运行以下命令:
cd /var/repo
mkdir project-example.git && cd project-example.git
git init --bare
我使用以下代码设置文件 post-receive
:
#!/bin/bash
git --work-tree=/var/temp/project-example --git-dir=/var/repo/project-example.git checkout -f
cd /var/temp/project-example
npm install
npm run build
rm -rf /var/www/project-example/*
mv -f /var/temp/project-example/build/* /var/www/project-example/
当我在本地机器上通过 git 向远程服务器推送时,出现以下错误:
remote: hooks/post-receive: line 4: npm: command not found
remote: hooks/post-receive: line 5: npm: command not found
但是,通过SSH访问服务器并执行命令:
# it works standard
cd /var/repo/project-example.git
source hooks/post-receive
评论
系统服务器:Ubuntu14.04
我通过 nvm 安装了 node。
当 git 挂钩运行时,它不一定具有与通过 SSH 登录时相同的 PATH 变量集。尝试在调用脚本时将 npm 的完整路径放入脚本中;那应该可以解决问题。
更新(2019 年 6 月 7 日):
几个评论者在使用上述解决方案时遇到了找不到节点的问题,这让我意识到它不是很健壮。与其将路径放在对 npm 本身的调用中,不如将必要的路径添加到脚本的环境中,例如如果 npm(和节点)恰好在 /usr/bin/
中,请在调用 npm 之前将以下内容添加到您的脚本中:
export PATH=$PATH:/usr/bin
事实上,确保挂钩与通过 SSH 登录时一样工作的更可靠方法是找出登录时的路径(即 [= 的输出12=]) 并相应地在你的钩子脚本中设置路径(当然你可能需要省略一些用户特定的路径等)
问题
我创建了一个项目,其中使用 Apache 和 Git.
在 DigitalOcean 中配置服务器对于服务器上的初始化项目,我运行以下命令:
cd /var/repo
mkdir project-example.git && cd project-example.git
git init --bare
我使用以下代码设置文件 post-receive
:
#!/bin/bash
git --work-tree=/var/temp/project-example --git-dir=/var/repo/project-example.git checkout -f
cd /var/temp/project-example
npm install
npm run build
rm -rf /var/www/project-example/*
mv -f /var/temp/project-example/build/* /var/www/project-example/
当我在本地机器上通过 git 向远程服务器推送时,出现以下错误:
remote: hooks/post-receive: line 4: npm: command not found
remote: hooks/post-receive: line 5: npm: command not found
但是,通过SSH访问服务器并执行命令:
# it works standard
cd /var/repo/project-example.git
source hooks/post-receive
评论
系统服务器:Ubuntu14.04
我通过 nvm 安装了 node。
当 git 挂钩运行时,它不一定具有与通过 SSH 登录时相同的 PATH 变量集。尝试在调用脚本时将 npm 的完整路径放入脚本中;那应该可以解决问题。
更新(2019 年 6 月 7 日):
几个评论者在使用上述解决方案时遇到了找不到节点的问题,这让我意识到它不是很健壮。与其将路径放在对 npm 本身的调用中,不如将必要的路径添加到脚本的环境中,例如如果 npm(和节点)恰好在 /usr/bin/
中,请在调用 npm 之前将以下内容添加到您的脚本中:
export PATH=$PATH:/usr/bin
事实上,确保挂钩与通过 SSH 登录时一样工作的更可靠方法是找出登录时的路径(即 [= 的输出12=]) 并相应地在你的钩子脚本中设置路径(当然你可能需要省略一些用户特定的路径等)