EBOOK · 亲密关系 《别再用关系止痛》已上线:先试看,刺到再买完整版(RM15)

Google Apps Script 系统设计入门:.gs 文件、触发器、部署、Web App,一次讲清

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,却完全不知道差别

那你现在需要的不是更多代码,而是系统设计视角


目录

  1. .gs 文件到底是什么?
  2. 一个项目应该有多少个 .gs?
  3. 触发器(Triggers)到底在干嘛?
  4. Time-driven Trigger 适合什么情况?
  5. Functions 是什么?Run 又是什么?
  6. Google 要求验证权限时该怎么办?
  7. Email nurturing 用 GAS 怎么做?
  8. doGet / doPost 是什么?为什么 doPost 常卡住?
  9. Manage Deployment:铅笔 vs New Deployment
  10. 常见问题 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 适合当后端吗?

适合轻后端,不适合高并发。

什么时候该拆项目?

当你开始担心“一个改动影响全系统”时。

GAS System Design:真实业务中的系统设计与可维护性

更多 Google Apps Script 系统设计内容在这里

回到主题 Hub ↗