程式庫是指令碼專案,其中的函式可在其他指令碼中重複使用。
如果所有程式碼都包含在單一指令碼專案中,使用程式庫的指令碼執行速度不會那麼快。雖然程式庫可讓開發和維護作業更方便,但在速度至關重要的專案中,請盡量少用程式庫。因此,在 Google Workspace 外掛程式中,應限制使用程式庫。
存取圖書館
如要在專案中加入程式庫,您必須至少擁有該程式庫的檢視層級存取權。如要納入的程式庫不是您所撰寫,請與作者聯絡並要求存取權。
您需要納入程式庫的指令碼 ID。存取程式庫後,請前往「專案設定」頁面,找出指令碼 ID。
在指令碼專案中新增程式庫
- 在 Apps Script 編輯器的左側,按一下「程式庫」旁邊的「新增程式庫」圖示 。
- 在「指令碼 ID」欄位中,貼上程式庫的指令碼 ID。
- 按一下「查詢」。
- 按一下「版本」下拉式選單,然後選取要使用的程式庫版本。
- 確認預設的「識別碼」名稱是否要與這個程式庫搭配使用。這是指令碼用來參照程式庫的名稱。舉例來說,如果您將其設為
Test,然後呼叫該程式庫的方法,如下所示:Test.libraryMethod。 - 按一下 [新增]。
使用程式庫
使用內建程式庫的方式與使用預設服務相同。舉例來說,如果 Test 是程式庫的 ID,請輸入 Test,然後立即加上半形句號,即可查看程式庫中的方法清單。
如要開啟所含程式庫的參考文件,請按照下列步驟操作:
在指令碼編輯器的左側,按一下程式庫名稱旁邊的「更多」圖示 ,然後選取「在新分頁中開啟」。
移除媒體庫
在指令碼編輯器左側的程式庫名稱旁邊,依序點按「更多」圖示 「移除」>「移除程式庫」。
如果作者刪除程式庫,您仍須從包含的程式庫清單中移除該程式庫。
更新程式庫
變更程式庫版本或更新其 ID。
- 在編輯器左側的「程式庫」下方,按一下程式庫名稱。
- 進行所需修改並按一下「儲存」。
建立及共用程式庫
如要將指令碼專案當做程式庫使用及共用,請按照下列步驟操作:
- 建立指令碼的版本化部署作業。
- 與所有可能的資料庫使用者分享至少檢視層級的存取權。
- 將指令碼 ID 提供給這些使用者,指令碼 ID 位於「專案設定」頁面。
最佳做法
撰寫程式庫時,請遵守下列準則:
- 請為專案選擇有意義的名稱,因為其他人納入程式庫時,這個名稱會做為預設 ID。
- 如要讓程式庫使用者無法查看 (也無法使用) 腳本的一或多個方法,請在方法名稱結尾加上底線。例如
myPrivateMethod_。 - 程式庫使用者只能看到可列舉的全球屬性。包括函式宣告、使用
var在函式外部建立的變數,以及在全域物件上明確設定的屬性。舉例來說,如果將enumerable設為false,Object.defineProperty()就會建立可在程式庫中使用的符號,但使用者無法存取這個符號。enumerable 為確保程式庫使用者能使用指令碼編輯器自動完成功能和自動產生的說明文件,請為所有函式加入 JSDoc 樣式的說明文件。範例如下:
/** * Raises a number to the given power, and returns the result. * * @param {number} base the number we're raising to a power * @param {number} exp the exponent we're raising the base to * @return {number} the result of the exponential calculation */ function power(base, exp) { ... }
資源範圍
使用程式庫時,資源可分為兩種:共用和非共用。共用資源是指程式庫和包含的指令碼都內建存取相同資源例項的權限。下圖以「使用者屬性」為例,說明共用資源:

如果資源未共用,表示程式庫和內含指令碼都只能存取資源的執行個體。不過,程式庫可以提供對未共用資源的存取權,方法是讓明確函式對這些資源執行作業。以下是您會納入程式庫的函式範例,用於公開指令碼屬性:
function getLibraryProperty(key) {
const scriptProperties = PropertiesService.getScriptProperties();
return scriptProperties.getProperty(key);
}
下圖以指令碼屬性為例,說明非共用資源:

下表列出共用和非共用資源,供您參考:
| 資源 | 已分享* | 未共用** | 附註 |
|---|---|---|---|
| 鎖定 | 在程式庫中建立的執行個體會對所有人 (包括指令碼) 顯示。 | ||
| 指令碼內容 | 在程式庫中建立的執行個體會對所有人 (包括指令碼) 顯示。 | ||
| 快取 | 在程式庫中建立的執行個體會對所有人 (包括指令碼) 顯示。 | ||
| 觸發條件 | 程式庫中建立的簡易觸發條件不會由包含的指令碼觸發。 | ||
| ScriptApp | |||
| UiApp |
|
||
| 使用者屬性 | |||
| 記錄器和執行記錄 | |||
| Google 協作平台、試算表和其他容器 | 呼叫 getActive 會傳回包含指令碼的容器。 |
||
| MailApp 和 GmailApp | |||
|
* 這表示程式庫沒有自己的功能/資源執行個體,而是使用呼叫該程式庫的指令碼所建立的執行個體。
** 這表示程式庫有自己的資源/功能執行個體,且使用該程式庫的所有指令碼都會共用並存取該執行個體。 | |||
測試程式庫
如要測試程式庫,請使用 Head 部署作業。只要具備指令碼的編輯者層級存取權,就能使用 Head 部署作業。
但您仍須儲存至少一個版本的媒體庫。
偵錯程式庫
偵錯包含程式庫的指令碼時,您無法逐步執行程式庫程式碼,也無法在其中設定中斷點。如果您嘗試在偵錯模式中逐步進入程式庫函式,偵錯工具會略過該函式,並逐步執行呼叫指令碼中的下一行。
使用程式庫版本的 HEAD (開發模式),無法逐步執行程式庫或在程式庫中設定中斷點。
如要偵錯程式庫程式碼,請使用下列其中一種方法:
- 從程式庫專案進行偵錯:在 Apps Script 編輯器中開啟程式庫指令碼專案。如要使用特定引數測試程式庫函式,請在程式庫專案中建立暫時的「測試」函式,呼叫程式庫函式,然後在偵錯模式下執行該測試函式。
- 記錄:在程式庫函式中使用
console.log(),將資訊輸出至執行記錄。當其他指令碼呼叫程式庫時,這些記錄會顯示在呼叫指令碼的執行記錄中。