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

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

 # 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执行了一个非npm到Cygwin的命令,它也很好看。 (当我通过ssh ,Cygwin无法正常加载一些path…?)这是什么原因?

信息。

 # 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 

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

由sshd启动的subprocess从其sshd服务器父进程inheritance其最小的环境。 sshd服务器在另一个帐户下运行,因此有另一组环境variables。 setuid()调用不会更改环境。 没有机制来获取用户特定的环境。


你看到这个错误的原因是你的configuration( ~/.npmrc )中引用了${APPDATA} 。 您可以将configuration更改为不依赖于此variables,也可以在SSH会话中设置variables,例如:

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