2017-02-10 101 views
2

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

# 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无法正常加载一些路径......?) 这是什么原因?

信息。

# 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

当您连接到Cygwin的SSH服务器上,当您打开控制台用自己现有的登录会话你没有得到你做同样的方式登录环境。显然,这是一个不可逾越的限制。一位开发商writes

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


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

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