问题标签 [google-closure-compiler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 警告 - 危险地使用全局 this 对象
在 Google Closure Compiler 中,我收到警告
警告 - 危险地使用全局 this 对象
这是一个例子。错误行和偏移量是指单词的开头this
我只是将其更改为匿名方法,但我aToggle
在文件的其他地方重新使用,因此需要命名。
我可以标记aToggle
为/**@constructor*/
-- 但它不是构造函数。是否有另一个注释可以用来消除此警告,或者我是在将其标记为构造函数还是出现一堆无用的警告之间陷入困境?
javascript - 使用 Google Closure 定义配置对象的最佳方式
我喜欢 Google Closure 编译器如何优化代码中的符号。但是,我还没有找到一种好的方法来定义将配置对象作为参数的公共导出函数。考虑这个代码片段:
现在假设我们加载了这个脚本,并且想要调用 myFoo 如下:
如果编译,这将失败,因为 id 和 clazz 属性被压缩。
有谁知道使用 Google Closure 编译器实现和导出配置对象的优雅方式?
javascript - 如何让闭包编译器在调用函数时停止抱怨联合类型?
我在使用 jQuery-1.4.3 externs 文件时特别看到了这一点。的javadocs读取
我有一个看起来像这样的电话:
闭包抱怨:警告 - jQueryObject.prototype.height 的实际参数 1 与找到的形式参数不匹配: (jQueryObject|null|number) required: (function (number, number): ?|number|string|undefined) $('# Xobni').height($(window).height());
通过玩弄(删除可能的返回类型),我可以看到问题是对宽度的第一次调用可能会返回一个 jQueryObject,并且由于这不是有效的输入,所以 Closure 给了我一个错误。我试着添加这个:
但随后闭包抱怨:警告 - 找到初始化变量:(jQueryObject|null|number) required: number var w = $(window).width();
问题是当宽度接受一个参数时,它返回一个 jQueryObject。当它不带参数时,它返回一个数字。所以我知道我的电话没问题,但 javadocs 并没有完全反映这一点,所以 Closure 警告我。有没有办法适当地修复 javadocs 或者告诉 Closure 我知道这个结果将是一个数字。我知道我可能可以抑制错误,但我想知道如何更好地注释这些东西。
谢谢您的帮助!
javascript - 使用 Google Closure Compiler Application 将所有文件 .js 压缩到一个文件中
我想.js
在命令行中使用 Google Closure Compiler 将同一目录中的所有文件压缩到一个文件中。
对于一个文件,它是:
但是我没有在文档中找到如何将我的其他文件放在最后final.js
而不覆盖最后一个压缩文件?
我想要这样的东西:
有可能或必须执行一个程序,将所有文件添加到文件中并压缩后?如果你能帮助我,谢谢!
google-closure-compiler - Why won't the Closure Compiler enforce function signatures for objects returned from anonymous functions?
I'm creating objects with private/public access restrictions as commonly promoted by Crockford. For example, I have something like this:
If I issue a call, such as
Closure should tell me that I'm invoking a function with the wrong number of arguments. I've tried helping Closure out with JavaDoc comments on myPublicFunction:
Still, no complaint. I've tried various forms of JavaDocs for foo, and the only one that worked was to document it as a record type:
That worked, but the compiler didn't try to enforce that the myPublic object function actually matched the signature I documented in the record field for the JavaDoc. So this will work so long as I make sure to doc all my functions in these returned objects and make sure I keep the signatures in my docs aligned with what I actually return. Am I missing some better way to enforce this?
Thanks!
javascript - Google Closure Compiler Advanced:在编译时移除代码块
如果我使用这段代码并编译它(高级优化)
我得到这个代码
有什么方法可以使用 Closure Compiler 删除 toString 函数?
javascript - Google Closure Compiler 100% 输入
关于 google 闭包编译器,我怎样才能让我的应用程序 100% 输入?
我已经用 jsdoc 注释标记了所有内容。甚至有可能获得100?我在 64.6%
javascript - 查找破坏 IE 的 ECMAScript/JavaScript 错误
我在一个相对庞大的 ECMAScript 代码库(> 60,000 LOC)上工作,我们往往会为我们可怕的朋友 Internet Explorer(尤其是 6 和 7)检测错误而费力。
目前,我被一个问题困扰了 3 天,我的 RIA 在 Google Chrome、Firefox 3.6、Opera 和 Internet Explorer 8 中呈现良好,但在 IE7 模式下运行 Internet Explorer 8(或使用真正的 IE)时失败-7)。
我的问题真的是:你如何识别会在 IE7 中产生错误的代码?
通常我依赖 JSLint 并且我倾向于捕捉通常的嫌疑人(尾随逗号,我讨厌你),但在这种特殊情况下,我刚刚对我的所有代码重新运行了一个 linter,包括源代码和最小化代码,它没有产生我通常的嫌疑人。所以我想我错误地引入了 IE 不喜欢的东西(谁知道呢,也许我疯了,在某处使用了 Array.map 而不是 dojo.map?)它在我的脸上炸开了,产生了很好的错误消息对我一点帮助都没有(“[object object]”和“is null”,它不应该是,所以我假设上游有一个错误,它默默地失败并阻止了这个对象的创建)。
我试过看一下 Google Closure Linter,但它并没有产生什么特别的东西,而且我也不认为 Google Closure Compiler 会成为我的救星。是否有任何工具(命令行、Web 服务或其他)可以解析/运行代码,就好像它正在模拟 IE 一样,以便我们可以得到适当的错误?
任何提示表示赞赏。
编辑:感谢您迄今为止在尝试解决我的问题方面的帮助,但我真正要问的是是否有工具可以进行此类检查,这意味着针对特定浏览器验证功能集和语法。在我看来,这是 JS 世界中严重缺乏的东西(对于 FF 或 Chrome 来说,显然它们的调试器更有帮助)。
EDIT2:我今天(3天后)最终找到了我的问题的根源,通过在两个分支之间进行所有代码更改并意识到问题实际上已经存在但之前从未检测到并通过更旧的更改来缩小范围混乱并最终最终在所有地方添加控制台日志,直到我遇到故障点(上帝感谢emacs的正则表达式支持,可以将日志添加到每一行......很重但有效......)。有趣的事实是:IE 吞下了一个错误消息,该消息应该显示在 try catch 块中,最初是捕获源问题,然后重新抛出它。仍然不知道为什么,但如果没有,那会更容易找到,因为它是为此目的而设计的,以防万一它坏了。诡异的。可能不喜欢深层次的重投。
我会留下这个问题,因为现在没有实际问题的答案。
google-closure - 如何为 Google Closure Compiler 自动生成外部变量
假设您正在处理具有多个外部库依赖项的 javascript 项目,并希望使用 Google Closure Compiler 在 ADVANCED_OPTIMIZATIONS 模式下编译您的源代码。
由于在这种模式下,编译器会将您的代码调用重命名为外部库对象和函数,因此您必须提供externs以防止发生这种重命名。
但是,手动生成 extern 需要做很多工作,那么,从给定的 javascript lib 自动生成适当的 extern 的最佳方法是什么?
javascript - 是否可以让 Google Closure 编译器 *not* 内联某些函数?
闭包编译器内联一个函数,但如果该函数没有内联,代码大小会更小(我只关心代码大小 - 这是针对JS1k的)。我可以告诉编译器我不想内联该函数吗?
编辑:只是为了更好地解释一下,这是我的功能:
在a
画布上下文中的位置。因为代码里的s太多a.lineTo
了,使用这个函数是值得的。像这样,我的代码是 1019 字节(所有的lineTo
s 都替换为a.lineTo
)。如果我将功能更改为:
新行以某种方式强制编译器不内联这个函数,这给了我 993 个字节。因此,如果我可以摆脱 14 字节,console.log();
我会再节省 14 个字节。