我想通了,这不是很难,但有一些陷阱。
基本上,您可以在以下几种模式之一中使用依赖生成脚本 calcdeps.py(您应该阅读 calcdeps.py 文档):
- 生成 deps.js 文件
- 将所有内容连接到一个文件中,可选择使用闭包编译器对其进行编译。
对于开发,您应该使用 (1),因为它允许您在编辑 JS 源代码后不运行 calcdeps.py,除非您更改依赖关系树。其余的答案是关于这种方式的,我还没有尝试过另一种方式。
这是我为生成它所做的:
#!/bin/bash
cd closure-library/closure/goog
python ../bin/calcdeps.py -p ../../../js -o deps > ../../../my-deps.js
...假设以下目录结构:
project/
closure-library/ (as checked out from SVN)
js/ (my JS code)
app.html
(该-p
参数遍历指定目录中的所有js文件,文档说如果需要可以指定多个目录进行搜索。)
上面的调用在主 app.html 旁边创建了一个 my-deps.js 文件,我用它来运行应用程序。创建的文件包含有关我的 JS 文件的信息js/
,如下所示:
goog.addDependency('../../../js/controllers.js', ['proj.controllers'], []);
goog.addDependency('../../../js/ui.js', ['proj.ui'], ['proj.controllers']);
- 第一个字符串是我的 JS 文件相对于closure-library/closure/goog/base.js的路径(这很重要!),第二个数组是goog.provide
-d 字符串列表,最后一个数组是列表goog.require
-d 字符串。
现在在 app.html 我有:
<script src="closure-library/closure/goog/base.js"></script>
<script src="my-deps.js"></script>
<script>
goog.require("proj.ui");
</script>
<script>
// here we can use the required objects
</script>
笔记:
- 除了包含闭包的 base.js 之外,我还包含了我生成的 deps.js
- 如教程中所述,
goog.require
调用必须在单独的 script 标签中,因为它附加了一个 script 标签来加载所需的脚本,并且在当前 script 标签完成处理后加载它们。
陷阱:
- 上述路径相对于 base.js 的问题。
goog.require
通过连接 base.js 基本 URL(即没有 base.js 叶名)和 deps.js 中 goog.addDependency 的第一个参数来创建要加载的脚本 URL。
- calcdeps.py 在 Windows 上不能很好地工作,特别是在 deps.js 字符串文字中使用反斜杠
- 如果某些事情不能正常工作,您可能需要查看所有提到 calcdeps 的问题,并确保您有最新的结帐。