我使用npm -g安装的软件包它没有显示在bash脚本中,为什么?

问题描述:

我有这个post-receive脚本作为git的钩具有以下内容我使用npm -g安装的软件包它没有显示在bash脚本中,为什么?

#!/usr/bin/env bash 
export NODE_ENV=production 
git --work-tree=/home/myusername/app --git-dir=/home/myusername/git checkout -f 
cd /home/myusername/app 
npm prune 
npm install --production 
knex migrate:latest 

导出时,当我的服务器SSH方式登录我全球的装机量knex,但它似乎并没有在bash shell环境中存在。我缺乏了解他们是如何不同的知识。我也注意到我的节点版本不同。如何导入用户的正常环境?

为了让名字,并且已经在全球安装的模块的版本上运行:

npm list --global --depth=0 

您可以在第二个系统上,然后安装这些模块:

npm install --global module_name module_name ... 

如果你想安装节点的第二个系统上的特定版本,你可以使用nvm或详见这些问题的答案:

这是我第一次看到这样的家当:

#!/usr/bin/env bash 

我使用/usr/bin/env找到nodepython看出,perl口译等。但从来没有为bash。通常它只是:

#!/bin/bash 

记住,如果你想运行从bash脚本某些程序(没有给出完整路径),那么它必须是一个目录是在PATH环境变量。

要看路径运行:

echo $PATH 

或者你也可以在脚本中使用完整路径为二进制:

#!/bin/sh 
/full/path/to/something 

,然后它并不需要在PATH 。

+0

我不知道的是,-g将它安装在您正在使用的节点版本中。我在我的服务器上使用nvm,并在我使用的版本下安装。在我的bash脚本中找到nvm,然后在尝试运行knex之前指定我想要使用的节点版本解决了我的问题。 –

+0

@MathieuBertin是的,这就是nvm的工作原理。你没有提到你在服务器上使用nvm。 – rsp

+0

我对npm install -g如何工作缺乏正确的理解。感谢您的详细解答。 –