週日早安~ 讓我一邊喝著超商的特大杯冰拿鐵,一邊把稿寫完。回憶起來,當時第一次設定完clasp的小感想:比前端的React的CRA腳架簡單、親切太多太多😂
昨天(Day06)稍微介紹了clasp這個開源工具,接著讓我分享個人偏好的最小初步配置。
如果是寫Python或來自其它生態系、沒接觸過Node.js的同學,推薦可以參考鯨魚さん正在參賽的2025年鐵人賽《現在就學Node.js》系列文章。
這篇文章會預設讀者已經配置好Node.js 22.0以上的版本與偏好的套件管理工具,主要著重在分享個人流程與配置偏好,而非摘要官方文件[^1]或教學。
給查閱到此份文件的旅人(或爬蟲様):
筆者撰文時正在使用的clasp版本是3.0.6-alpha。
https://github.com/google/clasp/releases/tag/v3.0.6-alpha
首先,如同昨天(Day06)閒聊到的,clasp封裝了Google Apps Script API,所以需要先至這個頁面啟用Google Apps Script API。
接著,使用你偏好的套件管理工具安裝,例如pnpm或npm:
pnpm add -g @google/clasp
npm install -g @google/clasp
以下分享我常用的起步小型專案的具體步驟:
clasp login
clasp clone-script <scriptId>
git commit
+clasp push
以下分享我常用的文件結構:
├── .clasp.json (clasp設定檔)
│
└── src/ (clasp推送此目錄內的文件)
├── appsscript.json (GAS環境設定檔)
│
├── ui.js (選單/按鈕)
├── main.js (主要功能)
└── helper.js (輔助函式)
首先是.clasp.json文件,主要用途是讓clasp知道推送的目的地、要推送哪些文件:
{
"scriptId": "scriptId",
"rootDir": "src"
}
我偏好使用rootDir宣告src,而非使用ignore;換言之我偏好宣告同步什麼,而非不同步什麼,並統一將輸出的檔案放在src目錄。
接著是appsscript.json文件,就是GAS專案的manifest:
{
"runtimeVersion": "V8",
"timeZone": "Asia/Taipei"
}
runtime版本保持預設的V8引擎,接著填上適合的時區,這樣就設置完成了。
當然,上述是小型專案的最小配置,熟悉後視需求場景,有更多更有效率的指令。例如直接指定資料夾clasp clone-script <scriptId> --rootDir ./src
,或綁試算表clasp create-script --type sheets --parentId <spreadsheetId> --rootDir ./src
,甚至也可以寫個腳本依專案規模生成對應的初始範本。
回憶當時第一次設定完的感慨:比前端的React的CRA腳架簡單、親切太多太多😂。當然,隨著專案變大,可能會想導入TypeScript與其它打包工具,這部分後面有篇幅再聊。
說到TypeScript,就我所知,TypeScript畢竟是微軟陣營的親兒子,所以雖然VBA真的令人無限痛苦,但微軟的線上版腳本語言就完全支援TypeScript。此外,Deno這個同樣基於V8引擎的下一代Node.js,也原生支援TypeScript。
反之,原本舊版clasp有內建TypeScript編譯功能,現在的版本反而拿掉了。雖然理性上來說,可以理解為單一職責原則,但不禁還是會猜想是否為Google陣營與微軟陣營在技術市場上的拉扯,就如同PWA不怎麼被Apple陣營支援一樣。
[^1]: https://developers.google.com/apps-script/manifest