当前位置:  开发笔记 > 编程语言 > 正文

如何使用goog.provide和goog.require加载我自己的js模块?

如何解决《如何使用goog.provide和goog.require加载我自己的js模块?》经验,为你挑选了2个好方法。

我们正在尝试将我们项目的包装从dojo切换到谷歌关闭,但到目前为止我们还没有运气.这是一个简单的例子,说明了我们要完成的任务:


    
        
        
    




然后/foo/bar.js我有:

goog.provide("foo.bar");
foo.bar.echo = function(s) {console.debug(s);}

我在firebug中收到的错误如下:

goog.require could not find: foo.bar
foo is not defined

当我查看Net选项卡时,没有一个http请求来获取文件 - 我希望闭包库生成一个脚本标记来获取bar.js.

救命!;)



1> Nickolay..:

我想通了,这不是很难,但有一些问题.

基本上,您可以使用以下几种模式之一使用依赖关系生成脚本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我有:





注意:

    除了包含closure的base.js之外,我还包括我生成的deps.js

    正如本教程中所提到的,goog.require调用必须位于单独的脚本标记中,因为它附加了一个脚本标记来加载所需的脚本,并在当前脚本标记完成处理后加载它们.

陷阱:

    路径相对于base.js的上述问题.goog.require通过将base.js基本URL(即没有base.js leafname)和第一个参数连接到deps.js中的goog.addDependency来创建要加载的脚本URL.

    calcdeps.py在Windows上运行不正常,特别是使用deps.js字符串文字中的反斜杠

    如果某些内容不能正常工作,您可能需要查看提及calcdeps的所有问题并确保您拥有最新的结帐.



2> gatapia..:

更新!

新版本的calcdeps.py稍微改变了游戏规则.要创建deps.js,您现在需要使用-d标志.例如:

python path-to-closure-library/closure/bin/calcdeps.py -i path-to-your-src/requirements.js -o deps -d path-to-closure-library/closure/ -p path-to-your-src/ --output_file=path-to-your-src/deps.js

编译:

python path-to-closure-library/closure/bin/calcdeps.py -i path-to-your-src/requirements.js -d path-to-closure-library/closure/ -p ./ --output_file=path-to-your-release/scripts.min.js -c path-to-compiler/compiler.jar -f "--compilation_level=ADVANCED_OPTIMIZATIONS" -f "--debug=true" -f "--process_closure_primitives=true" -f "--manage_closure_dependencies=true" -o compiled

所以这个过程实际上现在变得容易多了,但是你必须利用你的ESP的力量来发现它完全没有文档.calcdeps.py现在也无法在Windows上使用Python 3.1,因此这也是很有趣的.一些黑客让它为我工作(我不会放在这里,因为我不是一个python程序员,必须有更好的方法来做到这一点).

一般来说,最后一天一直非常有趣,希望这篇文章可以帮助别人避免同样的享受.

圭多

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有