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

标签 node.js linux git bash knex.js

导出以下内容时,我将此post-receive 脚本作为git 钩子(Hook)

#!/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 的环境中。我缺乏了解它们有何不同的知识。我还注意到我的 Node 版本不同。如何导入用户的正常环境?

最佳答案

要获取全局安装的模块的名称和版本,请运行:

npm list --global --depth=0

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

npm install --global module_name module_name ...

如果你想在第二个系统上安装特定版本的 Node,你可以使用 nvm 或查看这些答案以获取详细信息:

这是我第一次看到这样的shebang:

#!/usr/bin/env bash

我见过使用 /usr/bin/env 来查找 nodepythonperl 解释器等等,但永远不会用于 bash。通常只是:

#!/bin/bash

请记住,如果您想从 Bash 脚本运行某个程序(不提供完整路径),那么它必须位于 PATH 环境变量中的目录中。

查看您的 PATH 运行:

echo $PATH

或者您可以在脚本中使用二进制文件的完整路径:

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

然后它就不需要在 PATH 中了。

关于node.js - 我使用 npm -g 安装的包没有显示在 bash 脚本中,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43262516/

相关文章:

node.js - 为什么我不能访问 Mongoose 模式的方法?

c++ - 如何使用 C 或 C++ 登录 linux

linux - 如何在 linux 中使用一个模式执行多个可执行文件

git - 如何重新设置这个分支?

json - webpack $JSON.stringify.apply 不是一个函数

javascript - 使用 ejs 模板获取通过输入发布到同一页面的值

node.js - Passport.js 和 Mongoose.js 在登录时填充用户 - 在 req.user 上丢失填充字段

linux - ImportError:/lib64/libc.so.6: 版本 `GLIBC_2.17' 在 RHEL 6.9 上导入 tensorflow 时找不到(圣地亚哥)

git - 在 git 提交消息中包含日期或其他变量

git不会提交,因为删除的文件不存在