问题标签 [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.

0 投票
1 回答
2041 浏览

javascript - 使用 jquery 关闭编译器应用程序

我已经设法创建了一个使用 jQuery 和 jQuery UI 的小型 js 应用程序,使用 google 的具有高级优化的闭包编译器。只是为了清楚起见:我没有编译 jQuery 本身,只是我使用 jquery 的应用程序。我想知道是否有人可以确认这个想法也适用于更大更复杂的应用程序。

程序如下:

0.- 您有一个调用 jquery-1.4.3.min.js、test1.js 和 test2.js 的 html 文件

1.- 编译您的应用程序并导出属性映射文件

属性映射是一个键/值文件,包含编译前后的属性名称:

2.- 将 prop.out 复制到 prop.in 并对其进行编辑,以便将 jQuery 属性(函数)替换为相同的名称(这可以使用列表 jquery 的函数轻松自动化):

3.- 使用 prop in 作为属性映射输入重新编译

4.- 现在在您的 html 中,包括 min.js 和 jquery-1.4.3.min.js。应用程序应该可以正常运行,但您的代码应该更快更小。

这将缩小您的代码,而不是 jquery 的。

正如我所说,我已经在一个小应用程序中对此进行了测试。如果有人有一个更大更复杂的应用程序,很高兴知道它可以工作。

谢谢,

黑格

0 投票
3 回答
579 浏览

javascript - ADVANCED_OPTIMIZATION 不重命名

我正在 Google 闭包编译器的帮助下编写 Google Chrome 扩展。我大量使用消息 API 在不同进程上运行的代码之间进行通信。这就是为什么我的文件需要单独编译的原因。如果我使用高级优化,我还必须在使用此消息 API 发送的数据中使用带引号的字符串访问属性。这没有问题,但它让我的代码看起来很难看。但我喜欢高级优化带来的死代码删除。

我希望能够在没有高级优化带来的重命名的情况下删除死代码。闭包编译器可以做到这一点吗?

0 投票
2 回答
617 浏览

javascript - 预编译为纯 JavaScript 的 JavaScript 模板语言

我正在为我正在处理的项目使用高级模式下的Google Closure Compiler。这是一个非常激进的 JavaScript 编译器,可以相当多地优化你的代码。然而,为了做到这一点,它需要看到整个画面。也就是说,如果我给window.foo赋值,然后只从JS中访问编译器看不到的window.foo,它就不存在了,因为它会被改成window.f甚至被移除全部一起。

当涉及到 JS 寺庙时,这会使事情变得复杂。由于它们是在运行时从字符串中加载的,因此它们倾向于引用不再存在的变量。这可以通过对用于向模板提供值的对象使用带引号的赋值来稍微缓解。例如。templateContext['user'] 而不是 templateContext.user。但是,这不允许我做 templateContext.user.username 等等,所以它有点限制。

tl;dr:我需要一个 JavaScript 模板解决方案,可以将其预处理为纯 JavaScript,我可以将其包含在 .js 文件中。

这样的事情存在吗?

0 投票
5 回答
8507 浏览

javascript - 如何强制谷歌闭包编译器保持“使用严格”;在编译的js代码中?

如果您使用的是模块模式并且有这样的东西:

并使用 Google Closure Compiler 编译代码,该"use strict";指令不会将其放入编译文件中。

那么如何防止 Closure Compiler 移除 ES5/strict 指令呢?

(请注意,我不想使用强制 ES5/strict 模式的其他模式,即简单地将“use strict”添加到编译文件的第一行。我想使用这里描述的模块模式.)

0 投票
3 回答
557 浏览

javascript - 闭包编译器是如何工作的?

我想知道 Google 的 Closure Compiler 是如何工作的。例如,我可以让它转换函数调用,例如:

到实际执行:

我问这个是因为我有很多包装器可以绑定一些功能,并且我希望 Closure Compiler 将它们转换回具有更少的函数调用。

实际上,一个额外的函数调用是否会使应用程序明显变慢?

0 投票
3 回答
1772 浏览

javascript - 如何防止 Closure Compiler 重命名“true”、“false”和“null”

Google Closure Compiler 重命名代码中的所有“true”、“false”和“null”出现;

并改用这些速记;在以下情况下;

现在; Google Analytics 代码定义了它自己的“s”变量;覆盖值“true”;正如你所看到的,这会导致很多问题。

我不想更改 GA 代码;我只是想让 Closure Compiler 退出重命名 true 等。Externs 不起作用。

你知道有什么方法可以做到这一点吗?

0 投票
2 回答
884 浏览

php - Google Closure Compiler:程序访问的问题

我正在尝试以编程方式访问Closure Compiler工具,但 PHP 和 JavaScript 都存在问题。这是一个快速而肮脏的 PHP 脚本,我只是为了使用编译器的 REST API 而编写的:

我看到的输出是:

我想,也许我的cURL 选项有问题。所以我尝试了 JavaScript(通过jQuery.post()调用)。我“ jQuerify ” da 随机 Firefox 窗口并在Firebug控制台中运行以下代码:

“网络”面板为此显示 403 错误。

我错过了什么?

0 投票
2 回答
1320 浏览

javascript - 关闭编译器跳过文件

我有一个 shell 脚本,它收集页面上的所有 .js 文件并将它们连接起来,以便使用闭包编译器进行编译。但是,我不希望通过编译器优化任何特定的 js 文件。例如,我有编译 fileA.js、fileB.js 和 fileC.js 的命令。如何标记跳过 fileB.js 但仍以正确的顺序将其放置在输出文件 scripts.min.js 中?因此,fileA.js 和 fileC.js 将使用 SIMPLE_OPTIMIZATION 进行优化,而不会触及 fileB.js。我可以在文件本身的注释中放置一个关键字,即跳过此文件吗?

0 投票
1 回答
269 浏览

vb.net - 闭包编译器服务 API

尝试将闭包编译器服务集成到我的一个应用程序中并遇到一些问题。

返回的错误是“(413)请求实体太大。” 听起来很合理,但我知道服务接受的文件比我发送的文件大。

有任何想法吗?

0 投票
4 回答
26803 浏览

javascript - “void 0”和“undefined”之间的区别

我正在使用"Closure Compiler",在编译我的脚本时,我花费了以下内容:

编译前:

编译:

有了这个我相信使用“void 0”和“undefined”的问题,使用有什么区别还是两种情况都很好?

编辑

如果我定义用“void 0”编译的“var undefined”,如果我没有定义用“undedined”编译的“undefined”,那么“undefined”和“void 0”之间的字符数无关

测试

编辑二:性能,基于此链接

代码和测试

IE 8:
typeof:228ms
未定义:62ms
void 0: 57ms

Firefox 3.6:
typeof:10ms
未定义:3ms
void 0:3ms

Opera 11:
typeof:67ms
未定义:19ms
void 0:20ms

Chrome 8:
typeof:3ms
未定义:5ms
void 0:3ms