Google Apps Script 系统设计入门:.gs 文件、触发器、部署、Web App,一次讲清
发布时间:2025年12月28日 · 预计阅读时间:22 分钟 · 作者:DAPHNETXG
这不是一篇教你“怎么写 GAS 脚本”的文章。
这是写给那些已经在用 Google Apps Script 跑真实业务、但系统开始变复杂、变不稳定的人。
如果你正在经历这些问题:
- .gs 文件越写越多,但你已经不确定「应该拆还是合」
- onEdit、onFormSubmit、time-driven 混在一起,偶尔出错却复现不了
- Run 可以,自动触发不行
- doPost 经常“卡着”,却没人告诉你为什么
- 部署时看到铅笔、New deployment、Test deployment,却完全不知道差别
那你现在需要的不是更多代码,而是系统设计视角。
目录
- .gs 文件到底是什么?
- 一个项目应该有多少个 .gs?
- 触发器(Triggers)到底在干嘛?
- Time-driven Trigger 适合什么情况?
- Functions 是什么?Run 又是什么?
- Google 要求验证权限时该怎么办?
- Email nurturing 用 GAS 怎么做?
- doGet / doPost 是什么?为什么 doPost 常卡住?
- Manage Deployment:铅笔 vs New Deployment
- 常见问题 FAQ
一、.gs 文件到底是什么?
.gs 本质上就是 JavaScript。
你可以把一个 GAS 项目理解为:
- 一个运行在 Google 云环境里的 JavaScript 项目
- 自动获得 Spreadsheet、Gmail、Drive 等权限接口
.gs 文件只是逻辑分区,不是执行边界。
所有 .gs 在同一个项目里,本质上共享同一个执行上下文。
重点:
- .gs 文件的拆分,是为了人类可维护性
- 不是为了性能
- 也不是为了权限隔离
二、一个项目应该有多少个 .gs?
没有标准答案,但有一个系统级原则:
一个 .gs 负责一类“职责”,而不是一段“流程”
推荐结构:
- config.gs:所有常量、ID、开关
- triggers.gs:所有 onEdit / onSubmit / time-driven
- engine_calc.gs:所有计算逻辑(绝不写在 Sheet)
- engine_invoice.gs:PDF / Email / Docs 相关
- utils.gs:通用工具函数
如果你发现自己在一个文件里同时处理:
计算 + 发邮件 + 写 Sheet + 控制流程
那这个系统迟早会炸。
三、GAS 里的 Trigger 到底在干嘛?
Trigger 的本质不是“自动化”,而是:
「什么时候,把控制权交给 Google」
最常见三种:
- onEdit:用户手动改 Sheet
- onFormSubmit:Google Form 提交
- Time-driven:时间到就跑
系统越复杂,你越要减少 Trigger 数量。
因为 Trigger = 不可控执行。
四、Time-driven Trigger 适合什么情况?
Time-driven 适合:
- 定期同步
- 批量补发 email
- 清理旧数据
- 系统健康检查
不适合:
- 即时反馈
- 和用户操作强绑定的逻辑
一句话:
凡是“等一下也没关系”的事,才适合 time-driven。
五、Functions 是什么?Run 又是什么?
Function 是代码。
Run 是你手动执行。
重要但常被忽略的一点:
Run ≠ Trigger 环境
这就是为什么:
- 你 Run 正常
- 自动触发却失败
因为权限、来源、执行人都不一样。
六、Google 要求验证权限时怎么办?
这是正常现象,不是 Bug。
解决思路:
- 用脚本所有者账号 Run 一次关键函数
- 确保 Scope 已授权
- 避免在 Trigger 内首次调用新权限
企业级做法:把权限“预热”。
七、Email nurturing 用 GAS 怎么做?
GAS 非常适合做轻量级 Email 自动化:
- 订单确认
- Invoice 发送
- 内部 CC 追溯
但不适合:
- 大规模营销
- 复杂分群
正确姿势是:事务性,而不是营销型。
八、doGet / doPost 是什么?为什么 doPost 常卡住?
doGet / doPost 是 GAS 的 Web App 接口。
doPost 常卡住的原因:
- 外部请求格式不对
- Content-Type 不匹配
- 权限未部署到最新版本
80% 的问题,其实是部署版本错了。
九、Manage Deployment:铅笔 vs New Deployment
这是最容易踩坑的一点。
- 铅笔:修改现有部署(ID 不变)
- New Deployment:新版本,新 ID
如果你:
- 改了代码
- 却发现行为没变
九成是:你在跑旧 deployment。
FAQ:Google Apps Script 系统设计常见问题
一个项目能不能同时用多个 Trigger?
可以,但越少越好。Trigger 多 = 不可预测性高。
GAS 适合当后端吗?
适合轻后端,不适合高并发。
什么时候该拆项目?
当你开始担心“一个改动影响全系统”时。