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

获得对库的访问权限

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

您需要要包含的库的脚本 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 在函数外部创建的变量,以及在全局对象上显式设置的属性。例如,将 Object.defineProperty()enumerable 设置为 false 会创建一个可在库中使用的符号,但用户无法访问此符号。
  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() 将信息输出到执行日志。当库被其他脚本调用时,这些日志会显示在调用脚本的执行日志中。