gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:23:41 25 4
gpt4 key购买 nike

我们正在尝试将项目的打包方式从 dojo 切换到 google 闭包,但到目前为止我们还没有成功。这是一个简单的例子,说明了我们正在努力完成的事情:


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="runtime/src/core/lib/goog-rev26/base.js"></script>
<script>
goog.require("foo.bar");
function main() {foo.bar.echo("hello world")}
</script>
</head>
<body onload="main()">
</body>
</html>

Then in /foo/bar.js I have:


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

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

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

当我查看“网络”选项卡时,没有发出提取文件的 http 请求 - 我期望闭包库生成一个脚本标记来提取 bar.js

救命啊! ;)

最佳答案

我想通了,这不是很难,但有一些陷阱。

基本上,您可以在以下几种模式之一中使用依赖项生成脚本 calcdeps.py ( you should read calcdeps.py docs ):

  1. 生成 deps.js 文件
  2. 将所有内容连接到一个文件中,可选择使用闭包编译器对其进行编译。

对于开发,您应该使用 (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>

注意:

  1. 除了包括闭包的 base.js 之外,我还包括我生成的 deps.js
  2. 如教程中所述the goog.require call has to be in a separate script tag , 因为它附加了一个脚本标签来加载所需的脚本,并且在当前脚本标签完成处理后加载它们。

陷阱:

  1. 上述问题与相对于 base.js 的路径有关。 goog.require 通过连接 base.js 基本 URL(即没有 base.js 叶名)和 deps.js 中 goog.addDependency 的第一个参数来创建要加载的脚本 URL。
  2. calcdeps.py 在 Windows 上运行不佳,尤其是 using the backslashes in the deps.js string literals
  3. 如果有什么不对劲,您可能需要查看 all issues mentioning calcdeps并确保您有最新的结帐。

关于javascript - 如何使用 goog.provide 和 goog.require 加载我自己的 js 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1918996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com