VS CodeのSFTPが「No such file」のエラーを吐くようになったのを対応した話


VS CodeのSFTPでエラーになったのを直した話

「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関数」のみ変更しています。