项目级构建系统必须先保存 .sublime-project 文件,所有部署配置(路径、命令、变量)均依赖它;推荐用 rsync/ssh 命令而非 sftp 插件;需设 working_dir 为 $project_path 并启用 shell: true;通过 build_with 绑定快捷键,变量用于多环境隔离。

项目级构建系统必须先有 .sublime-project 文件
没保存项目就配不了部署构建系统——Sublime 不会为无项目的文件夹保存任何构建配置。直接点 Project → Save Project As…,生成 .sublime-project 文件后才能往下走。这个文件是部署逻辑的唯一落脚点,所有路径、命令、环境变量都依赖它。
常见错误现象:[Errno 2] No such file or directory 或构建时提示“no build system”,八成是项目没存,或者保存后没刷新(改完 .sublime-project 后需手动重载项目:菜单 Project → Reload Project)。
- 不要把构建系统写进用户级
Python.sublime-build,那属于全局,无法绑定项目专属路径或密钥 -
.sublime-project必须和项目根目录同级,不能放在子文件夹里 - 如果用 Git 管理,建议把
.sublime-project加入.gitignore,避免暴露部署路径或凭据
部署构建系统推荐用 rsync 或 ssh 命令而非 SFTP 插件
虽然 SFTP 插件能拖拽上传,但它本质是 GUI 封装,不便于复现、调试和集成 CI 流程。真正可控的部署,应走构建系统调用原生命令:
例如,一个最小可行的 rsync 部署配置片段(写在 .sublime-project 的 build_systems 数组里):
{
"name": "Deploy to staging",
"cmd": ["rsync", "-avz", "--delete", "./", "user@staging:/var/www/myapp/"],
"working_dir": "$project_path",
"shell": true
}
-
working_dir必须设为$project_path,否则./会从 Sublime 安装目录出发,不是你当前项目 -
shell: true是关键,否则~、*、管道等 shell 特性全部失效 - 别在
cmd里硬编码密码;用 SSH key 认证,确保ssh user@staging能免密登录 - 若要交互式确认(比如防止误发生产),加
"cmd": ["bash", "-c", "read -p 'Deploy to staging? [y/N] ' ans && [[ $ans == 'y' ]] && rsync ..."]
快捷键绑定必须用 build_with + args.name,不能绑 build
Ctrl+B 默认只触发第一个可用构建系统,不会识别你当前想跑的是“Deploy”还是“Test”。想一键部署,必须绕过默认行为:
在 Preferences → Key Bindings 里添加:
[{
"keys": ["ctrl+alt+d"],
"command": "build_with",
"args": {"name": "Deploy to staging"}
}]
-
name字段值必须和.sublime-project里定义的完全一致,包括空格和大小写 - 别覆盖
Ctrl+B,否则你会失去对单文件 Python/C++ 的快速运行能力 - 如果部署命令执行后窗口一闪而过,检查终端是否被 Sublime 自动关闭:在构建系统里加
"target": "exec"并确保"quiet": false,方便看报错
多环境部署要靠变量替换,别写死 IP 或路径
开发、测试、生产共用一个构建系统?靠 $project_path 和 $file_path 还不够。得用 Sublime 的变量扩展机制:
在 .sublime-project 中可定义自定义变量:
"settings": {
"deploy_target": "user@staging:/var/www/myapp/"
},
"build_systems": [{
"name": "Deploy",
"cmd": ["rsync", "-avz", "--delete", "./", "$deploy_target"],
"working_dir": "$project_path"
}]
- 变量名必须以字母开头,支持下划线,但不能含短横线(
deploy-target无效) - 变量只在当前项目生效,不同项目可定义同名变量指向不同服务器,彻底隔离
- 敏感信息(如密码、token)绝不能放这里;SSH key、.netrc 或环境变量才是正解
部署这件事,表面是传几个文件,实际考验的是路径控制粒度、执行上下文隔离和错误反馈可见性。很多人卡在“命令在终端能跑,Sublime 里就失败”,问题往往出在 working_dir 没设对,或忘了 shell: true。真要稳定,就老老实实用 rsync 或 scp,别贪图插件封装的便利。











