Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 无法在shell脚本中运行npm_Node.js_Shell_Ssh_Npm_Nvm - Fatal编程技术网

Node.js 无法在shell脚本中运行npm

Node.js 无法在shell脚本中运行npm,node.js,shell,ssh,npm,nvm,Node.js,Shell,Ssh,Npm,Nvm,在连续部署上下文中,我执行了一个shell脚本来更新和重新启动远程服务器中的应用程序 剧本是: ssh user@myserver <<'ENDSSH' cd /opt/myapp git pull npm i forever stop src npm run staging ENDSSH 注: 如果我使用ssh连接到远程服务器并手动输入这些命令,一切都会正常工作 节点和npm与nvm一起安装在远程服务器上 哪个npm提供/root/.nvm/versions/node/v6.10

在连续部署上下文中,我执行了一个shell脚本来更新和重新启动远程服务器中的应用程序

剧本是:

ssh user@myserver <<'ENDSSH'
cd /opt/myapp
git pull
npm i
forever stop src
npm run staging
ENDSSH
注:

如果我使用ssh连接到远程服务器并手动输入这些命令,一切都会正常工作

节点和npm与nvm一起安装在远程服务器上 哪个npm提供/root/.nvm/versions/node/v6.10.0/bin/npm

如果您的节点和npm安装在/root/.nvm/versions/node/v6.10.0/bin中,那么将其添加到脚本中应该可以解决问题:

PATH="/root/.nvm/versions/node/v6.10.0/bin:$PATH"
或者,您可以尝试使用绝对路径,如:

/root/.nvm/versions/node/v6.10.0/bin/npm install
等等。但是请注意,如果您的节点是从二进制软件包安装的,而不是从源安装的,那么npm二进制文件中的shebang行很可能是/当路径中的节点版本正确时,usr/bin/env节点将不工作-有关更多信息,请参阅此答案:


当从源安装节点时,npm将有一个正确的shebang行,带有节点二进制文件的绝对路径,并且可以在节点不在路径中时使用。

不要执行@rsp建议的操作,而不要硬编码版本 您应该按照以下方式编写NVM脚本的源代码:

. /root/.nvm/nvm.sh
如果您设置了默认版本,NVM应为您解析该版本,
这样,您就不会因为更新了较新的NodeJS版本而返回到该脚本。

我在jenkins中也遇到了同样的问题

下面几行是在.bashrc文件的底部,我只是把它放在.bashrc文件的顶部

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

所以看起来您正在尝试将npm与nvm结合使用。您是否尝试在脚本中运行nvm命令以选择版本?在运行npm之前?@wheeler在脚本中添加了nvm-version。在“continuos部署上下文”中执行时找不到get-bash:line 3:nvm:command您使用的是哪个用户?与您使用ssh的用户相同?通过键入node确保CI用户可以使用节点-version@GreensterRox当我在安装了node、npm等的计算机上运行脚本时,遇到了相同的问题。因此,CI不是问题的根源路径=/root/.nvm/versions/node/v6.10.0/bin:$PATH解决了我的问题如果您没有将nvm安装为root,那么路径也可以是~/.nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion