VS CodeのSFTPが「No such file」のエラーを吐くようになったのを対応した話
「VS Code」に「SFTP」の拡張機能を追加して、サーバへファイルをアップロードしています。
1ヶ月ほど前からアップロード時にエラーが出るようになりました。
それを直したお話です。
「VS Code」がアップデートされたタイミングくらいから、SFTPでアップロードをすると「No such file」のエラーが出るようになりました。
エラーは出ますが、アップロード自体は問題なくされているので、そのうち直るかなと放置しておりました。
しかし、1ヶ月ほど経っても変わらないので調べてみました。
こちらに記載のやり方でエラーが出なくなりました。
sftp.jsのコードを直す
SFTPのバージョンは「1.12.9」です。
VS Codeのバージョンは「1.56.2」です。
Macの場合は、以下のパスのファイルを直します。
「~/.vscode/extensions/liximomo.sftp-1.12.9/node_modules/ssh2-streams/lib/sftp.js」
このファイルの中にある「WriteStream関数」の中に、以下のように1行追加します。
function WriteStream(sftp, path, options) { if (options === undefined) options = {}; else if (typeof options === 'string') options = { encoding: options }; else if (options === null || typeof options !== 'object') throw new TypeError('"options" argument must be a string or an object'); else options = Object.create(options); // For backwards compat do not emit close on destroy. options.emitClose = false; options.autoDestroy = false; <-この行を追加
2929行目くらいになりますが、「emitClose」で検索するとわかりやすいです。
検索すると2つ見つかります。
そのうちのWriteStream関数の方に「options.autoDestroy = false;」を追加します。
VS Codeを再起動すると反映され、エラーが出なくなります。
もし、SFTPでのダウンロード時にもエラーが出る場合は、「emitClose」で検索した時に引っかかるもう一つの「ReadStream関数」のところにも同じように追加すれば直るのでは無いかと思います。
私の場合は、ダウンロードの時には出ないので「WriteStream関数」のみ変更しています。