【问题标题】:Error occurred npm command via ssh (Cygwin)通过 ssh (Cygwin) 发生错误 npm 命令
【发布时间】:2017-02-10 19:01:37
【问题描述】:

在我的 MacOSX (10.11.6) 上,我尝试通过 ssh 对 Cygwin 的 bash (Windows10) 执行 npm ls 命令,但出现以下错误。

# npm ls
Error: Failed to replace env in config: ${APPDATA}
   at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:418:13
   at RegExp.[Symbol.replace] (native)
   at RegExp.[Symbol.replace] (native)
   at String.replace (native)
   at envReplace (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:414:12)
   at parseField (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:392:7)
   at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:335:17
   at Array.forEach (native)
   at Conf.add (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:334:23)
   at ConfigChain.addString (C:\Program Files\nodejs\node_modules\npm\node_modules\config-chain\index.js:244:8)

Error: Failed to replace env in config: ${APPDATA}
   at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:418:13
   at RegExp.[Symbol.replace] (native)
   at RegExp.[Symbol.replace] (native)
   at String.replace (native)
   at envReplace (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:414:12)
   at parseField (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:392:7)
   at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:335:17
   at Array.forEach (native)
   at Conf.add (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:334:23)
   at ConfigChain.addString (C:\Program Files\nodejs\node_modules\npm\node_modules\config-chain\index.js:244:8)

所以我尝试执行其他 npm 命令(例如npm install 等),但结果是相同的错误。 如果我在 Cygwin 控制台上执行 npm 命令,它可以正常工作。 此外,在 MacOSX 上,我通过 ssh 向 Cygwin 执行了 npm 以外的命令,它看起来也很好。 (当我通过ssh 登录时,Cygwin 无法正常加载某些路径...?) 这是什么原因?

信息。

# node -v
v6.9.4

# npm -v
Error: Failed to replace env in config: ${APPDATA}
    at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:418:13
    at RegExp.[Symbol.replace] (native)
    at RegExp.[Symbol.replace] (native)
    at String.replace (native)
    at envReplace (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:414:12)
    at parseField (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:392:7)
    at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:335:17
    at Array.forEach (native)
    at Conf.add (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:334:23)
    at ConfigChain.addString (C:\Program Files\nodejs\node_modules\npm\node_modules\config-chain\index.js:244:8)

3.10.10

# uname -rv
2.6.1(0.305/5/3) 2016-12-16 11:55

【问题讨论】:

    标签: node.js bash ssh npm cygwin


    【解决方案1】:

    当您连接到 Cygwin 的 SSH 服务器时,您获得的登录环境与使用您自己现有的登录会话打开控制台时不同。显然,这是一个不可逾越的限制。其中一位开发者writes

    由 sshd 启动的子进程继承了它的最小环境 它的 sshd 服务器父进程。 sshd 服务器运行在 另一个帐户,因此有另一组环境变量。这 setuid() 调用不会改变环境。没有机制可以 获取用户特定的环境。


    您看到此错误的原因是您的配置 (~/.npmrc) 中有引用 ${APPDATA} 的内容。您可以将配置更改为不依赖此变量,也可以在 SSH 会话中设置该变量,例如:

    export APPDATA="$SYSTEMDRIVE\\Users\\$USERNAME\\AppData\\Roaming"
    

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2012-12-16
      • 2016-04-15
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多