Closure 库使用入门

本 Hello World 练习介绍了在网页上使用 Closure 库的过程。要完成此练习,您需要对 JavaScript 以及 Git 客户端Node.js 有一定的了解。

您好!Closure

如需开始使用 Closure 库,请按以下步骤操作,在一个简单的网页中使用 Closure JavaScript 函数:

第 1 步:下载并设置 Closure 库

通过在命令行中执行以下命令,从 Git 代码库下载 Closure 库:

git clone https://github.com/google/closure-library

您需要一个 Git 客户端才能执行此命令,但您可能有一个。尝试运行该命令,如果不起作用,请下载并安装 Git 客户端

执行此命令后,您应该会看到一个名为 closure-library 的目录,其中包含 Closure 库代码。

在继续之前,必须初始化 Closure 库代码库。本练习的部分内容依赖于一个名为 deps.js 的文件,系统会生成此文件(因此,它在首次签出时不会包含在代码库中)。如需生成此文件,请输入以下目录并运行 npm installnpmNode.js 捆绑在一起):

cd closure-library
npm install

第 2 步:创建使用 Closure 库的 JavaScript 文件

将以下 JavaScript 保存在名为 hello.js 的文件中。将此文件放在 closure-library 目录旁边。

goog.require('goog.dom');
goog.require('goog.dom.TagName');

function sayHi() {
  var newHeader = goog.dom.createDom(goog.dom.TagName.H1, {'style': 'background-color:#EEE'},
    'Hello world!');
  goog.dom.appendChild(document.body, newHeader);
}

第 3 步:创建 HTML 文件

将以下 HTML 保存在名为 hello.html 的文件中。将此文件放在 closure-library 目录和 hello.js 文件旁边。

<html>
  <head>
    <script src="closure-library/closure/goog/base.js"></script>
    <script src="hello.js"></script>
  </head>
  <body onload="sayHi()">
  </body>
</html>

第 4 步:向 Closure 库打招呼

在浏览器中打开 HTML 文件。您应该会看到“Hello world!”字样:

如何运作?

hello.js JavaScript 使用两个未定义的函数:goog.dom.createDom()goog.dom.appendChild()。这些函数来自哪里?

这些函数在您在第 1 步中下载到的 closure-library/dom/dom.js 文件中的 Closure 库中定义。

为了利用这些函数,该示例进行了以下两项操作:

  • 它在第 2 步中添加了 JavaScript 开头的语句 goog.require('goog.dom')
  • 它在第 3 步中包含 HTML,其中包含 Closure 库引导文件 base.js

base.js 文件定义了 goog.require() 函数。函数调用 goog.require('goog.dom') 会加载 JavaScript 文件,这些文件用于定义 goog.dom 命名空间中的函数,以及这些函数所需的 Closure 库中的其他文件。

Closure 库通过为每个文档动态添加 Closure 库文件的脚本标记来加载这些文件。例如,语句 goog.require('goog.dom') 会将以下标记添加到文档中,其中 path-to-closure 是从 HTML 文件到包含 base.js 的目录的路径:

<script src="path-to-closure/dom/dom.js"></script>

通常,单个 goog.require() 语句仅会加载 Closure 库代码库的一小部分。

注意:请勿将 goog.require() 语句放在使用 goog.required 函数或类代码的入口点所在的脚本标记中。goog.require() 调用会将代码添加到包含调用的脚本标记之后的文档中。例如,以下代码可以正常运行:

<script src="closure-library/closure/goog/base.js"></script>
<script>
  goog.require('goog.dom');
</script>
<script>
  var newHeader = goog.dom.createDom(goog.dom.TagName.H1);
</script>

goog.require() 调用会将 goog.dom.createDom() 的代码添加到包含 var newHeader = goog.dom.createDom(goog.dom.TagName.H1) 行的脚本标记之前,且紧邻该标记。

相反,以下代码会产生错误:

<script src="closure-library/closure/goog/base.js"></script>
<script>
  // DON'T DO THIS.
  goog.require('goog.dom');
  var newHeader = goog.dom.createDom(goog.dom.TagName.H1);
</script>

goog.require() 调用会在脚本标记中为 goog.dom.createDom() 添加代码,直到对 goog.dom.createDom() 进行调用之后,系统才会解析该代码。

添加 base.js 不是添加 Closure 库代码的唯一方法,但这是最简单的入门方式。不过,无论您如何获取 Closure 库代码,都要始终使用 goog.require() 声明所需的 Closure 库部分。

后续操作

此示例展示了一种仅获取所需 Closure 库部分的方法:将 base.js 添加到网页中并调用其函数 goog.require()

对于更高级的用法,建议使用 Closure Compiler 将 JavaScript 缩减为单个文件。