导出以下内容时,我将此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
或查看这些答案以获取详细信息:
- 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
这是我第一次看到这样的shebang:
#!/usr/bin/env bash
我见过使用 /usr/bin/env
来查找 node
、python
、perl
解释器等等,但永远不会用于 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/