2017-02-10 104 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"