Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何通过git在deploy项目上运行npm?(挂钩/立柱接收:npm:未找到命令) 问题_Node.js_Git_Ubuntu_Npm_Digital Ocean - Fatal编程技术网

Node.js 如何通过git在deploy项目上运行npm?(挂钩/立柱接收:npm:未找到命令) 问题

Node.js 如何通过git在deploy项目上运行npm?(挂钩/立柱接收:npm:未找到命令) 问题,node.js,git,ubuntu,npm,digital-ocean,Node.js,Git,Ubuntu,Npm,Digital Ocean,我创建了一个项目,其中使用Apache和Git在DigitalOcean中配置服务器 对于服务器上的init项目,我运行以下命令: 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/r

我创建了一个项目,其中使用Apache和Git在DigitalOcean中配置服务器

对于服务器上的init项目,我运行以下命令:

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和execute命令访问服务器:

# it works standard
cd /var/repo/project-example.git
source hooks/post-receive
评论 系统服务器:Ubuntu 14.04


我通过nvm安装了节点。

当git钩子运行时,它不必设置与通过SSH登录时相同的路径变量。当你调用npm时,试着把它的完整路径放在你的脚本中;这应该可以解决问题

更新(2019年6月7日):

有几个评论员在使用上述解决方案时发现了节点不存在的问题,这让我意识到它不是很健壮。与其将路径放在对npm本身的调用中,不如将必要的路径添加到脚本环境中,例如,如果npm(和节点)恰好位于
/usr/bin/
中,请在调用npm之前将以下内容添加到脚本中:

export PATH=$PATH:/usr/bin

事实上,确保钩子与通过SSH登录时的钩子工作方式相同的一种更可靠的方法是,在登录时找出路径(即,
echo$path
)的输出,并相应地在钩子脚本中设置路径(当然,您可能需要省略一些特定于用户的路径,等等)

如果我将完整路径设置为npm,但我得到..node:未找到命令,该怎么办?如果我连接ssh并运行npm命令,就不会有任何问题。也许git无法在系统中找到节点?@subdesign,我也被困在这一部分,你在哪里能找到它?我得到“env:node:没有这样的文件或目录”。我也在使用nvm。“当你调用npm时,试着在你的脚本中添加npm的完整路径;“你是怎么做到的?@Florian/@DavidTrinh/@subdesign-我根据你的评论更新/改进了我的答案。谢谢你的回答。在我的情况下(安装了nvm的节点)路径应该是:export PATH=$PATH:/home/USER/.nvm/versions/node/v13.12.0/bin