用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等百家爭鳴,做這行似乎變的光學習就很花費時間。
也難怪網路之前有傳過一個笑話「求不要更新了,老子学不动了」,真是心有戚戚焉。
留言列表