【问题标题】:A package I install using npm -g it doesn't show up in a bash script, why?我使用 npm -g 安装的包没有出现在 bash 脚本中,为什么?
【发布时间】:2017-04-07 02:28:55
【问题描述】:

在导出以下内容时,我将这个 post-receive 脚本作为 git 钩子

#!/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.js linux git bash knex.js


    【解决方案1】:

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

    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 中。

    【讨论】:

    • 我不知道的是 -g 将它安装在您正在使用的节点版本中。我在我的服务器上使用 nvm,它安装在我使用的版本下。在我的 bash 脚本中采购 nvm,然后在尝试运行 knex 之前指定我想使用的节点版本解决了我的问题。
    • @MathieuBertin 是的,nvm 就是这样工作的。您没有提到您在服务器上使用 nvm。
    • 我对 npm install -g 的工作原理缺乏正确的理解。感谢您的详细解答。
    猜你喜欢
    • 2015-07-09
    • 2021-07-25
    • 2017-06-15
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多