close

gdzuWVhg1f.png

用VSCode開發網站,當然會需要把檔案上傳。也自然會去用那個下載量最大,評分也很高的 SFTP Extensions。
然而,在這變化神速的IT界,事情不是我想的那麼簡單。

首先,在今年2月份,VSCode更新後,SFTP一上傳檔案就跳錯誤。查了半天,總算找到解決方案,就是在 sftp.json 加入:
    "algorithms": {
        "kex": [
            "ecdh-sha2-nistp256",
            "ecdh-sha2-nistp384",
            "ecdh-sha2-nistp521",
            "diffie-hellman-group14-sha1"
        ],
        "cipher": [
            "aes128-ctr",
            "aes192-ctr",
            "aes256-ctr",
            "aes128-gcm",
            "aes128-gcm@openssh.com",
            "aes256-gcm",
            "aes256-gcm@openssh.com"
        ],
        "serverHostKey": [
            "ssh-rsa",
            "ecdsa-sha2-nistp256",
            "ecdsa-sha2-nistp384",
            "ecdsa-sha2-nistp521"
        ],
        "hmac": [
            "hmac-sha2-256",
            "hmac-sha2-512",
            "hmac-sha1"
        ]
    }

就解決了。
然後經過了三個月,SFTP又炸了。
這次問題比較神奇,一切正常,只是顯示錯誤。
什麼意思?就是 SFTP 工作是正常的,檔案也可以上傳成功,但它就是會噴個錯誤訊息「No such file」給你。

有了上次經驗,這次我一樣去SFTP Extensions 專案那裡看一下到底什麼問題。
果不然,是因為 nodeJs 在 v14版時,stream.Writable 把 autoDestroy 這個選項預設改為 true 了。
( [4bec6d13f9] - (SEMVER-MAJOR) stream: enable autoDestroy by default (Robert Nagy) #30623 )
所以SFTP就炸啦。

雖然工作正常,但總是噴個錯誤出來實在煩人,既然知道問題原因,就好解決了。

我們只要去把 ~/.vscode/extensions/liximomo.sftp-1.12.9/node_modules/ssh2-streams/lib/ 目錄(資料夾)下,把 sftp.js 的檔案稍微改一下,把下面這行:

options.autoDestroy = false;

加到 options.emitClose = false; (2929行)的後面,WritableStream.call(this, options); 的前面。
然後存檔後重新啟動 VSCode 就好囉。

現代軟體真的感覺更新的太快了,而且因為環境太過複雜,完整測試看來是不可能的任務。
而且也因為環境複雜,套件、framework等百家爭鳴,做這行似乎變的光學習就很花費時間。
也難怪網路之前有傳過一個笑話「求不要更新了,老子学不动了」,真是心有戚戚焉。

arrow
arrow
    文章標籤
    VSCODE SFTP No such file
    全站熱搜

    averywu 發表在 痞客邦 留言(0) 人氣()