VSCode 保存时无法原生自动上传FTP,必须依赖扩展:ftp-simple(仅FTP,有乱码/不静默等缺陷)或sftp(推荐SFTP,支持静默上传、时间戳比对、密钥认证)。

VSCode 保存时自动上传到 FTP 的核心限制
VSCode 本身不支持 FTP 协议,也没有内置的“保存即上传”机制。所谓“自动上传”,必须依赖第三方扩展,而目前稳定可用的只有 ftp-simple(已停止维护但仍广泛使用)和更现代的替代品 sftp(注意:它用的是 SFTP/SSH,不是 FTP)。真正的 FTP(明文、主动/被动模式、无加密)在 VSCode 生态中已被边缘化,ftp-simple 是唯一还能勉强跑通的选项,但它有硬伤:不支持真正静默上传(会弹出状态栏提示,且失败时不报错)、无法可靠处理中文路径、被动模式配置稍有偏差就卡死。
为什么推荐改用 SFTP 而不是坚持 FTP
绝大多数支持 FTP 的服务器也同时开放 SFTP(端口 22),而且 SFTP 更安全、更稳定、与 VSCode 集成更好。扩展 sftp(作者 liximomo)能实现你想要的“Ctrl+S → 后台上传 → 无感知覆盖”,前提是服务器 SSH 服务开启且账号有对应目录写权限。
-
sftp扩展通过配置uploadOnSave和syncMode实现保存即传,不弹窗、不打断编辑流 - 它自动处理文件时间戳比对,避免重复上传;支持
ignore规则跳过node_modules或.git - FTP 的
ftp-simple在 macOS / Windows 新版 VSCode 上常因 Node.js 版本升级导致ftp模块编译失败,错误信息类似Error: Cannot find module 'ftp' - 如果你的服务器只开 FTP(比如某些老旧虚拟主机),那只能硬着头皮配
ftp-simple,但务必选 v0.7.6 及以下版本,新版已彻底弃用
配置 sftp 扩展实现静默上传的关键项
安装 sftp 后,在项目根目录建 .vscode/sftp.json,内容需严格匹配你的服务器环境。最容易出问题的是 host、port、remotePath 和 uploadOnSave 开关。
-
"uploadOnSave": true是开关,必须为布尔值true,不能写成字符串"true" -
"remotePath"必须以/开头,且是绝对路径(如"/var/www/html"),不是相对路径或 URL - 若服务器用非标准 SSH 端口(比如 2222),一定要显式写
"port": 2222,否则默认走 22,连不上 - 密码登录不推荐,建议用密钥:把私钥路径填进
"privateKeyPath",并确保该文件权限为600(Linux/macOS 下chmod 600 ~/.ssh/id_rsa) - 如果保存后没反应,打开 VSCode 输出面板,选
SFTP查看日志,常见错误是Permission denied (publickey)或ENOTDIR: not a directory, mkdir(说明remotePath写错了)
ftp-simple 的最低可用配置与避坑点
仅当你被强制绑定 FTP 协议时才考虑它。v0.7.5 是最后一个兼容 VSCode 1.80+ 的版本,安装需手动下载 vsix 文件并“从 VSIX 安装”。配置文件是 settings.json,不是独立 JSON。
- 必须启用
"ftp-simple.ftp.uploadOnSave": true,注意前缀是ftp-simple.ftp.,漏掉任一部分都不生效 -
"ftp-simple.ftp.passive": true几乎必开,否则内网或带 NAT 的环境大概率连接超时 - 服务器地址写
"ftp-simple.ftp.host": "192.168.1.100",不要加ftp://前缀,否则报错getaddrinfo ENOTFOUND ftp://192.168.1.100 - 中文文件名上传乱码?这是 FTP 协议本身的缺陷,
ftp-simple无法解决,只能改用英文命名,或换 SFTP - 它不支持多根工作区分别上传,所有文件都按同一套 FTP 配置走,项目混搭时容易覆盖错目录
真要走 FTP,就接受它“不静默”——每次保存都会在右下角闪一下“Uploading...”,这是协议层决定的,不是配置能关掉的。SFTP 才是安静干活的那个。











