在 Closure 工具中有一个名为 calcdeps.py 的 Python 脚本,它可以准确生成您想要的内容。
goog.provide/goog.require 入门:
将您的文件组织到一个目录结构中以匹配您想要的命名空间。ie 如果你声明命名空间'grantys.awesome.lib.Math',你的目录结构应该类似于grantys/awesome/lib/Math.js。
在您作为依赖项添加的每个文件中,第一个 javascript 函数调用应该是 goog.provide('grantys.awesome.lib.Math')。要依赖另一个文件或多个文件,请使用 goog.require('grantys.awesome.lib.Constants') 声明需求。*这很重要,goog.provide 是 calcdeps.py 用来确定每个文件可以提供什么的 -未编译它绝对零保证您说您提供的命名空间就是您在该文件中构建的内容。
使用正确的参数运行 calcdeps.py(搜索可能包含或不包含 goog.provide('some.library') 的文件的路径、要写入的文件名等)。这将生成一个文件,其中包含您需要手动编写的任何 goog.addDependency 语句。另请注意, calcdeps 生成的 deps 文件使用相对路径,从您正在编写输出文件的目录中可以看出(并不总是您运行命令的目录)
calcdeps.py 的输出示例:
goog.addDependency("../site/ui/MurphyBed.js", ['site.ui.MurphyBed', 'site.ui.MurphyBed.State', 'site.ui.MurphyBed.EventType', 'site.ui.MurphyBed.Error'], ['goog.dom', 'goog.object', 'goog.events', 'goog.events.EventTarget', 'site.fx.easing', 'goog.fx.dom', 'goog.fx.AnimationSerialQueue']);
goog.addDependency("../site/ui/SliderButton.js", ['site.ui.SliderButton'], ['goog.ui.CustomButton', 'site.ui.SliderButtonRenderer', 'goog.fx.dom', 'site.fx.easing']);
注意:如果更改依赖项,则必须重新运行 calcdeps.py。我自己的解决方案是使用正确的 args 将其包装在 shell 脚本中,因此当我进行需要重新扫描文件的更改时,我只需运行 ./calcdeps.sh