在我的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
答案 0 :(得分:1)
当您连接到Cygwin的SSH服务器时,您将无法获得登录环境,就像使用您自己的现有登录会话打开控制台时一样。显然,这是一个不可逾越的限制。其中一位开发人员writes:
由sshd启动的子进程从中继承其最小环境 它的sshd服务器父进程。 sshd服务器正在运行 另一个帐户,所以有另一组环境变量。该 setuid()调用不会改变环境。没有机制 获取用户特定的环境。
您看到此错误的原因是因为您在配置中引用了${APPDATA}
(~/.npmrc
)。您可以更改配置以不依赖此变量,也可以在SSH会话中设置变量,例如:
export APPDATA="$SYSTEMDRIVE\\Users\\$USERNAME\\AppData\\Roaming"