现在已经都使用 VSCode 的 SFTP 插件来进行远程服务器的文件传输了,我用的是 natizyskunk.sftp 这个插件,但是使用时会报一个错误。
TypeError: isDate is not a function
at attrsToBytes (/Users/shejibiji/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/SFTP.js:2492:45)
at SFTP.open (/Users/shejibiji/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/SFTP.js:331:15)
修复这个问题简单,所以之前每次都顺手给修改了。
但是更换设备或者清空了 VSCode 的插件缓存后就会再次出现这个问题,
于是记录下来,也方便以后遇到同样问题的朋友们。
这个错误是由于比较旧版本的 ssh2 依赖库在使用 isDate 函数时,误将其当作一个普通函数调用,而实际上在它引入的工具类(通常是 util 模块)中,该函数可能未被正确导出或已被废弃(例如 Node.js 新版本移除了 util.isDate)。
因为 natizyskunk.sftp 插件已经很久没有更新了,最快、最彻底的修复方法是直接修改本地插件的代码。
修复方法
# 打开编辑对应的插件JS文件
vim /Users/shejibiji/.vscode/extensions/natizyskunk.sftp-1.16.3/node_modules/ssh2/lib/protocol/SFTP.js
# 找到这句
# const { inherits, isDate } = require('util');
# 将其修改为
const { inherits } = require('util');
const isDate = (val) => val instanceof Date;
# 保存退出即可。
现在再上传或者下载就可以正常使用了。
由于缓存的原因,如果还报同样的错误,可以尝试重启 VSCode 或者清除插件缓存。

