vscode 无法直接提供 ftp 服务,因其仅为编辑器而非运行时环境,不内置 ftp 协议实现;所谓“node.js 搭建 ftp”实为借助 ftp-srv 等库在本地启动简易调试服务,仅限开发机使用,不具备生产级安全性、权限控制与稳定连接能力。

VSCode 本身不提供 FTP 服务,也无法通过 Node.js 插件“快速搭建”可对外访问的 FTP 服务器;所谓“Node.js 搭建 FTP”实际是运行一个本地调试用的简易 FTP 服务(如 ftp-srv),仅限本机测试,不具备生产可用性、权限控制或安全传输能力。
为什么不能靠 VSCode + Node.js 直接开 FTP 服务
VSCode 是编辑器,不是运行时环境;它不内置 FTP 服务模块,也不封装任何 FTP 协议实现。网上搜到的“python ftp_server.py”或“node ftp-server”示例,本质是独立脚本,和 VSCode 无直接关系——VSCode 只负责打开终端并执行命令。
- 这类脚本通常依赖第三方库(如 Node.js 的
ftp-srv或 Python 的pyftpdlib),需手动npm install ftp-srv或pip install pyftpdlib - 默认监听
0.0.0.0:21会失败:普通用户无权绑定 1–1023 端口,且 macOS / Windows 防火墙/杀软会拦截 - 没有用户认证、目录隔离、被动模式(PASV)支持,客户端连接常卡在 LIST 命令或报
500 Illegal PORT command - VSCode 终端关闭后服务即终止,无法后台驻留
真要本地跑个 FTP 测试,推荐用 ftp-srv(Node.js)
它轻量、纯 JS 实现,适合验证文件上传逻辑,但只应出现在开发机上,绝不可暴露到公网。
- 先初始化项目:
npm init -y && npm install ftp-srv - 新建
ftp-test.js:
{
"type": "module",
"dependencies": {
"ftp-srv": "^6.0.0"
}
}
写入以下内容(注意路径必须为绝对路径,且目录需存在):
import { FtpSrv } from 'ftp-srv';
const server = new FtpSrv({
url: 'ftp://0.0.0.0:2021', // 改用高位端口避权限问题
anonymous: true,
pasv_range: '2022-2030', // 必须设 PASV 端口范围,否则 FileZilla 连不上
cwd: '/Users/you/test-ftp-root', // macOS 示例;Windows 用 C:/test-ftp-root
});
server.on('login', (data, resolve, reject) => {
resolve({ root: '/' }); // 允许匿名登录,根目录映射到 cwd
});
await server.listen();
console.log('FTP server running on ftp://localhost:2021');
- 在 VSCode 终端中运行:
node ftp-test.js - 用 FileZilla 连接
ftp://localhost:2021,无需账号密码
vscode 中配置的是“上传”,不是“托管 FTP 服务”
你真正需要的,大概率不是“在 VSCode 里启动 FTP”,而是“把代码自动传到已有 FTP/SFTP 服务器”。这时候该用插件,不是写服务:
- 别碰已停更的
ftp-simple:中文路径乱码、连接超时静默失败、macOS 下频繁ENOTFOUND - 用
sftp插件(liximomo):基于 SSH,安全且持续维护;配置sftp.json时,port必须是22,填21就连不上 -
remotePath必须以/开头(如"/var/www/html"),否则上传到用户 home 目录下 - 想“保存即上传”,加
"uploadOnSave": true;但它对新建未保存文件、未激活编辑器标签页里的修改无效
真正容易被忽略的点是:SFTP 不是 FTP,协议不同,端口不同,配置项含义也不同;拿 FTP 的经验去填 SFTP 配置,90% 的连接失败都源于此。











