iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0

週日早安~ 讓我一邊喝著超商的特大杯冰拿鐵,一邊把稿寫完。回憶起來,當時第一次設定完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

配置步驟

以下分享我常用的起步小型專案的具體步驟:

  1. 建立一份新的Google Sheet(作為測試環境)
  2. 於該sheet建立直接連動的GAS專案
  3. 在本地也建立一個空白的專案並設置好git
  4. 登入clasp:clasp login
  5. 初次連動雲端:clasp clone-script <scriptId>
  6. 調整文件結構
  7. 修改配置文件
  8. 其它個人偏好設置
  9. 推回雲端: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陣營支援一樣。

Annotations

[^1]: https://developers.google.com/apps-script/manifest


上一篇
Day06|本地開發GAS專案:clasp簡介
系列文
我只是不想加班:一名客服人員的GAS自救之路7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言