我使用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
或详见这些问题的答案:
- Run npm as superuser, it isn't a good idea?
- node 5.5.0 already installed but node -v fetches with "v4.2.1" on OS X & homebrew?
- Node installed but node cannot be found in Ubuntu VPS
这是我第一次看到这样的家当:
#!/usr/bin/env bash
我使用/usr/bin/env
找到node
,python
看出,perl
口译等。但从来没有为bash
。通常它只是:
#!/bin/bash
记住,如果你想运行从bash脚本某些程序(没有给出完整路径),那么它必须是一个目录是在PATH环境变量。
要看路径运行:
echo $PATH
或者你也可以在脚本中使用完整路径为二进制:
#!/bin/sh
/full/path/to/something
,然后它并不需要在PATH 。
我不知道的是,-g将它安装在您正在使用的节点版本中。我在我的服务器上使用nvm,并在我使用的版本下安装。在我的bash脚本中找到nvm,然后在尝试运行knex之前指定我想要使用的节点版本解决了我的问题。 –
@MathieuBertin是的,这就是nvm的工作原理。你没有提到你在服务器上使用nvm。 – rsp
我对npm install -g如何工作缺乏正确的理解。感谢您的详细解答。 –