第一次聽說 GAS(Google Apps Script)是在入職現在公司實習崗位的時候。前輩讓我接手一個公司內部用的小工具的後續開發。那個工具就是用 GAS 寫的。依託於 Google 本家,它無縫和 G 家的各類工具集成,開放的 API 也非常全面而好用(當然你也可以在其他語言中調用谷歌的 API,只不過 GAS 是無縫集成的所以體驗最好罷了)。印象最深刻的是它對於 Google Spreadsheet 和 Google Calendar 的支持。我在空閒時間用 GAS 給研究室放在 Spreadsheet 上的日程表寫了一個自動導入 Calendar 的功能。基本上完全就是無腦套官方給的接口,敲代碼絲滑無比到令人感動。如果你平時總是被各種奇葩文檔折磨,請務必體驗一下 GAS。可能作為一門腳本語言(或者說平台),它也有複雜的一面,但是當只是想用它做一個簡單的 G 家服務的自動化和協同的時候,它在剛入門的時候就能提供非常美好的體驗。
關於本地化與版本控制#
GAS 提供了雲端的編輯器,同時也支持簡單的版本控制。但是對於用習慣了 Git 和 Github 的人而言,本地化可能是個更好的選擇。Google 的開發者們為此提供了一個很棒的開源工具:Clasp
安裝 Clasp#
Clasp 被封裝為一個 Package,如果你本地安裝了 npm,那麼你只需要運行:
npm install -g @google/clasp
如果本地沒有安裝 npm, 我的建議是安裝一個,我們可以從這裡跳轉到 Node.js 的下載界面。他們提供多平台的支持,另友情提醒請不要盲目追更新版本,LTS 版本是更穩妥的選擇(沒有人會願意看到每次運行程序的時候都會彈出幾行鮮紅的警告)。
在我們開始用 clasp 構建我們的腳本和應用之前,還需要完成一件要緊的事情。那就是登錄我們的谷歌帳號。不然谷歌會拒絕我們和沒有連接權限的雲端進行交互。我們可以運行以下命令:
clasp login
這會打開本地默認的瀏覽器,要求我們登錄谷歌帳號。我們需要登陸那個想要在上面部署應用或者腳本的帳號。
當然,如果你不信任你的電腦所處的環境,在每一次離開的時候,你可以選擇登出,這也只需要簡單的一行命令:
clasp logout
好了,到這裡我們就完成了準備工作,可以開始用 clasp 在本地部署我們的項目了。
在本地部署項目#
利用 Clasp,我們可以很容易的在本地創建一個新項目:
clasp create
這會在當前工作目錄創建一個默認的新項目。當然它也提供了一些更豐富的選項,我們可以用--title "My Script"
來指定項目的名稱, 也可以用--type
指定這個項目的類型。當然通過--rootDir
選項,我們也可以指定新項目存放的位置。另外有一個和 G 家的服務息息相關的選項--parentId "1D_Gxyv*****************************NXO7o"
,這可以讓我們把項目綁定到某一個特定的服務,比如說某個 Google SpreadSheet。對了,這裡的 ID 我們可以在對應服務的網址上找到:docs.google.com/presentation/d/{id}/edit
當然更多的情況下,我們往往是針對某一個已經存在的服務去編寫項目,這時候clasp clone
命令就很有用。我們可以直接用對應服務的網址來把對應的腳本項目複製到本地:
clasp clone "https://script.google.com/d/15ImUCpyi1Jsd8yF8Z6wey_7cw793CymWTLxOqwMka3P1CzE5hQun6qiC/edit"
到這裡,我們已經成功在本地部署了項目,當我們想要發布到雲端或者從雲端拉取的時候,我們可以使用clasp pull
和clasp push
命令,請務必注意這兩個命令和 Git 的根本不是同一回事,它們只會單純的覆蓋掉原先的內容。友善的建議是,避免使用clasp pull
,並且只在必要的時候使用clasp push
。當然,clasp 的開發團隊比較細心,使用clasp pull
的時候,他們通常不會直接覆蓋掉我們本地的文件,當 clasp 檢測到本地存在同名文件的時候,它會結束進程並且提醒我們這一點。
使用 Git 來對本地的 GAS 項目進行管理#
我們指望不上 GAS 自己在雲端內置的版本管理系統,它只提供了有限次數的版本,並且各類操作也沒有 Git 那麼完善。所以我們下一步的目標就是使用 Git 和 Github 來對本地的項目進行管理。其實無非就是在本地新初始化一個 Git 倉庫而已。
我們把工作目錄跳轉到對應項目內。然後初始化一個 Git 倉庫:
git init
如果只是想要在本地進行版本管理,那麼到這裡就可以照常使用 git 了。但是如果還想要上傳到 Github 等雲端倉庫,那麼我們還需要多幾步。
首先我們需要編寫.gitignore 文件,來讓 Git 忽略掉一些只需要保留在本地,而且也不希望 Git 去管理的文件。如果我們查看 clasp 在本地給我們創建的項目,我們就會發現有一個隱藏的.clasp.json 文件,裡面記錄了我們的 script id 和 parent id,用於 clasp 定位雲端上的相關文件。顯然這是不需要 Git 去管理的。所以我們可以在.gitignore 裡面忽略掉它。
touch .gitignore
echo ".clasp.json" > .gitignore
當然,你也可以用編輯器(比如 vscode)打開文檔編輯後保存。
接下來我們就可以正常執行git add
等命令了。
git add --all
git commit -m "init"
最後,你可以在 Github 上創建一個新倉庫,並將本地的倉庫推送上去。