库是一种脚本项目,其函数可在其他脚本中重复使用。

如果所有代码都包含在单个脚本项目中,那么使用库的脚本的运行速度会更快。虽然库可以使开发和维护更加方便,但在速度至关重要的项目中,请谨慎使用库。由于此 问题,Google Workspace 加载项中应限制使用库。

获取库的访问权限

如需在项目中添加库,您必须至少拥有该库的查看权限。如果您不是要添加的库的作者,请与作者联系并请求访问权限。

您需要要添加的库的脚本 ID。获得库的访问权限后,请在 项目设置 页面上找到脚本 ID。

将库添加到脚本项目

  1. 在 Apps 脚本编辑器的左侧,点击“库”旁边的“添加 库 ”。
  2. 在“脚本 ID”字段中,粘贴库的脚本 ID。
  3. 点击查找
  4. 点击版本 下拉菜单,然后选择要使用的库的版本。
  5. 检查默认的“标识符”名称是否是您要用于此库的名称。这是脚本用于引用库的名称。例如,如果您将其设置为 Test,然后按如下方式调用 该库的方法:Test.libraryMethod.
  6. 点击添加

使用库

像使用默认服务一样使用添加的库。例如,如果 Test 是库的标识符,请键入 Test,紧接着输入句点,以查看库中的方法列表。

如需打开添加的库的参考文档,请按以下步骤操作:

在脚本编辑器的左侧,点击库名称旁边的“更多”图标 > 在新标签页中打开

移除库

在脚本编辑器的左侧,点击库名称旁边的“更多”图标 > 移除 > 移除库

如果库被作者删除,您仍需要将其从添加的库列表中移除。

更新库

更改库的版本或更新其标识符。

  1. 在编辑器的左侧,点击“库”下方的库名称。
  2. 进行更改,然后点击保存

创建和共享库

如需将脚本项目用作库并进行共享,请按以下步骤操作:

  1. 创建脚本的版本化部署
  2. 与库的所有潜在用户共享至少查看权限。
  3. 向这些用户提供脚本 ID,该 ID 可在 项目 设置 页面上找到。

最佳实践

编写库时,请遵循以下准则:

  1. 为项目选择一个有意义的名称,因为当其他人添加您的库时,该名称将用作默认标识符。
  2. 如需让库用户无法看到(也无法使用)脚本的一个或多个方法,请在方法名称末尾添加下划线。例如,myPrivateMethod_
  3. 库用户只能看到可枚举的全局属性。这包括函数声明、使用 var 在函数外部创建的变量,以及在全局对象上显式设置的属性。例如,将 enumerable 设置为 falseObject.defineProperty() 会创建一个可在库中使用的符号,但用户无法访问此符号。
  4. 为确保库用户可以使用脚本编辑器自动补全功能和自动生成的文档,请为所有函数添加 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
用户属性
日志记录器和执行记录
网站、工作表和其他容器 getActive 的调用会返回添加的脚本的容器。
MailApp 和 GmailApp
* 这意味着库没有自己的功能/资源实例,而是使用调用它的脚本创建的实例。
** 这意味着库有自己的资源/功能实例 并且所有使用该库的脚本都共享并有权访问该 同一实例。

测试库

如需测试库,请使用 HEAD 部署。任何拥有脚本编辑器级访问权限的人都可以使用 HEAD 部署。

您仍然需要保存至少一个库版本。

调试库

调试包含库的脚本时,您无法进入库代码或在其中设置断点。如果您尝试在调试模式下进入库函数,调试程序会跳过该函数并进入调用脚本中的下一行。

将库版本设置为 HEAD(开发模式) 不会启用进入库或命中其中的断点的功能。

如需调试库代码,请使用以下方法之一:

  • 从库项目进行调试:在 Apps 脚本编辑器中打开库脚本项目。如需使用特定实参测试库函数,请在库项目中创建一个临时“测试”函数,该函数会调用您的库函数,然后在调试模式下运行该测试函数。
  • 日志记录:在库函数中使用 console.log() 将信息输出到执行日志。当库被另一个脚本调用时,这些日志会显示在调用脚本的执行日志中。