【问题标题】:How to force npm bin -g to print only the path如何强制 npm bin -g 仅打印路径
【发布时间】:2018-02-09 23:32:20
【问题描述】:

任务

我想在脚本中使用npm bin -g 返回的路径。

问题

npm bin -g 返回路径,然后 also 打印到新行,它不是 PATH 环境变量的一部分:

/home/username/.npm-global/bin
(not in PATH env variable)

为了让它更加随机,有时它也会打印此升级通知:

 ╭─────────────────────────────────────╮
 │                                     │
 │   Update available 5.3.0 → 5.6.0    │
 │     Run npm i -g npm to update      │
 │                                     │
 ╰─────────────────────────────────────╯

这些会导致我的脚本中出现错误消息并停止执行。

我尝试了什么

我尝试使用npm bin -g | head -n 1 仅处理输出的第一行,但第二行仍然存在。我什至尝试过 npm bin -g > /dev/null 但这使得 only 路径消失了,我仍然有通知。怎么回事?

【问题讨论】:

    标签: bash npm output


    【解决方案1】:

    tl;博士

    使用npm bin -g 2> /dev/null

    说明

    通知打印到标准错误。您需要使用2> 将其重定向到/dev/null

    如果您查看implementation of the npm bin command

    function bin (args, silent, cb) {
      if (typeof cb !== 'function') {
        cb = silent
        silent = false
      }
      var b = npm.bin
      var PATH = osenv.path()
    
      if (!silent) output(b)
      process.nextTick(cb.bind(this, null, b))
    
      if (npm.config.get('global') && PATH.indexOf(b) === -1) {
        npm.config.get('logstream').write('(not in PATH env variable)\n')
      }
    }
    

    您可以看到最后它会检查路径是否在 PATH 中,如果不在,则 将消息打印到 logstreamlogstream 来自 npm.config。如果您检查默认值,您可以在this line 中看到它使用标准错误:

    logstream: process.stderr,
    

    这就是为什么只获得第一行不起作用,没有第二行的原因。此外,> /dev/null 重定向了标准输出,因此您只留下来自标准错误的消息。您可以使用2> 重定向stderr。

    【讨论】:

    • 这也意味着您实际上不必在脚本中执行任何特殊操作即可使用该路径。 ls -l "$(npm bin -g)" 工作正常,但它会继续在屏幕上显示警告。
    • @thatotherguy 该脚本在启动时运行,并且由于 stderr 上有一些内容,它会弹出一条错误消息,需要确定才能继续。在找到解决方案之前我不知道这一点。
    • 有趣,我从未听说过这种行为。肯定会失败错误代码,但不仅仅是stderr。这是哪个启动系统?
    • @thatotherguy 它looked like this。登录后发生。这是~/.profile 末尾的代码:export PATH=$(npm bin -g):$PATH。我知道我可以对其进行硬编码,但这是针对开发笔记本电脑的,全局 pacakges 文件夹路径可以更改,因此它需要是动态的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2020-12-19
    • 1970-01-01
    • 2013-02-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多