sublime text 本身不支持远程热部署编译,所谓“一键触发”需通过插件或脚本串联保存、同步与远程执行;upload_on_save仅上传文件,不触发编译或重启,服务无热更新机制则页面不会生效。

Sublime Text 本身不支持“远程热部署编译”——它没有内置的远程执行、进程监听或增量编译能力;所谓“一键触发”,本质是把本地保存动作、文件同步、远程命令执行三者串起来,中间必须靠插件或脚本衔接,漏掉任一环都会卡在“点了没反应”或“传了没生效”。
为什么 upload_on_save 上传后服务没热更新?
上传 ≠ 部署。SFTP 插件只负责把文件拷过去,不会自动触发编译、重启进程或刷新缓存。常见错误现象:文件已更新到服务器,但浏览器还是旧页面,ps aux | grep node 显示进程没变。
- 确认服务器端是否真有热更新机制(如 Webpack Dev Server、Spring Boot DevTools、nodemon 等),不是所有项目都支持热更新
-
remote_path必须精确匹配服务实际监听的静态资源路径或源码目录,比如写成"/var/www/app"却实际运行在/opt/app,上传就白做了 - 如果用
upload_on_save: true,确保该配置项是布尔值true,不是字符串"true",否则静默失效 - 某些框架(如 Vue CLI)需额外配置
publicPath或outputDir,否则生成的 JS/CSS 路径错位,热更新也“看起来没生效”
如何让 Ctrl+S 同时完成上传 + 远程编译?
得绕过 SFTP 插件的纯同步逻辑,改用 Sublime 的构建系统(.sublime-build)调用本地 shell 脚本,由脚本完成上传 + SSH 执行编译命令。这是目前最可控、可调试的方式。
- 先确保本地能免密
ssh user@host,否则脚本会卡在密码输入 - 在项目根目录写一个
deploy.sh,内容类似:#!/bin/bash<br>rsync -avz --delete ./dist/ user@host:/var/www/html/<br>ssh user@host "cd /var/www/html && npm run build:prod 2>&1"
- 新建
deploy.sublime-build,关键字段:{<br> "cmd": ["bash", "-c", "cd $folder && ./deploy.sh"],<br> "working_dir": "$folder",<br> "shell": true<br>} - 绑定快捷键(如
Ctrl+Shift+B),避免和默认Ctrl+B(本地编译)冲突
sftp-config.json 放错位置或写错字段就完全不生效
SFTP 插件对配置文件极其敏感,不是“差不多就行”。它只认项目根目录下的 sftp-config.json,且只响应侧边栏里真正被“Add Folder to Project”加载的目录。
- 文件名必须是全小写
sftp-config.json,不能是SFTP-config.json或sftp_config.json - 必须放在侧边栏最顶层那个文件夹里(即
Project → Add Folder to Project加进去的那个),子目录下无效 -
remote_path结尾带不带/会影响路径拼接,例如"remote_path": "/var/www"+"index.html"→/var/wwwindex.html(少了个斜杠) - 用密钥登录时,删掉
password字段,填"ssh_key_file": "/home/you/.ssh/id_rsa",路径必须绝对,且私钥权限为600
真正难的不是配出能上传的 SFTP,而是让上传后的文件被正确识别、编译、加载——这取决于服务器环境是否就绪、路径是否精准、权限是否放开。很多人卡在最后一步:文件传上去了,但 chmod -R 755 /var/www 没跑,或者 SELinux 拦住了 nginx 读取新文件。这些不在 Sublime 控制范围内,但恰恰是“一键”失败的主因。











