通过ssh(Cygwin)发生npm命令错误

时间:2017-02-10 10:32:11

标签: node.js bash ssh npm cygwin

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

# 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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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