标签: google-closure-compiler

平等操作数的顺序是否重要?(例如1 == x vs x == 1)

所以我正在尝试使用Google Closure Compiler,我注意到它会切换所有相等参数,以便变量始终位于比较的右侧.

所以,现在不是typeof XMLHttpRequest=="undefined"我有"undefined"==typeof XMLHttpRequest,我有if(null!==a),而不是if(a!==null),就像一些例子.

我知道他们完成了同样的事情,但这不是我习惯的风格.切换后会有什么好处吗?我看不出会有什么.

有人可以向我解释为什么Closure Compiler决定这样做吗?只是写了那部分Closure的人的偏好吗?

编辑:为了澄清,人们告诉我为什么它可能被认为是良好的编码实践.那没关系,但这是在编译之后.是否有性能优势,或者Closure Compiler只是试图证明一个观点?

javascript google-closure-compiler

12
推荐指数
2
解决办法
492
查看次数

如何为Google Closure编译器自动生成externs

假设您正在使用具有多个外部库依赖项的javascript项目,并希望使用Google Closure Compiler以ADVANCED_OPTIMIZATIONS模式编译源代码.

由于在此模式下编译器会将代码调用重命名为外部库对象和函数,因此必须提供externs,以防止发生此重命名.

但是,手动生成externs需要做很多工作,那么,从给定的javascript lib自动生成适当的extern的最佳方法是什么?

google-closure google-closure-compiler

11
推荐指数
1
解决办法
4700
查看次数

javascript包,是一个保留关键字

我正在尝试使用Google Closure Compiler缩小第三方JavaScript库,但它在下面的行中出错:

inBlock.package = package = name
Run Code Online (Sandbox Code Playgroud)

错误是

错误 - 解析错误.之后缺少名字.运营商**

name上面是函数内的局部变量,inBlock是一个输入参数.package除了该错误行之外,函数中没有任何地方声明.

我想这可能是由于packageJavaScript中的保留关键字?知道JavaScript中的包是什么以及如何修复它?

javascript package google-closure-compiler

11
推荐指数
1
解决办法
5027
查看次数

谷歌闭包编译器和jquery

我将我的js代码复制粘贴到google编译器中,当我将其复制回我的应用程序时,它无法正常工作.我意识到我的代码需要jquery,所以我将jquery代码和我的代码复制到谷歌编译器中,希望它能轻松解决问题,但它也不起作用.

在chrome中,代码错误$(document).K(function () {就是文档就绪函数.错误是Uncaught TypeError: Object [object Object] has no method 'K'

我需要做些什么(暂时)工作?

谢谢你的建议.

javascript jquery google-closure-compiler

11
推荐指数
1
解决办法
5444
查看次数

谷歌闭包编译器和json

我有一个json字符串,我解析,然后用点表示法访问对象的属性.但是,在谷歌闭包编译器中,点符号(MyObject.PropertyName)给出了未定义属性的警告.

目前,我正在使用的解决方案是将我的代码转换为括号表示法(MyObject['PropertyName']).这将删除警告,但也会阻止编译器执行其工作.另一方面,当我写时JSON.stringify(MyObject),服务器接收一个具有可理解的属性名称的字符串.

所以我的问题是在处理运行时反序列化和序列化的json对象时,如何在高级模式下最好地使用google编译器.

javascript json google-closure-compiler

11
推荐指数
2
解决办法
4882
查看次数

JavaScript"编译器"

最近我发现Google Closure Compiler这么酷.有没有其他方法可以获得编译的静态类型语言的好处?

更新

它不是关于真正的编译器,而是关于JavaScript-JavaScript转换器,它提供类型验证等,优化和压缩.

javascript compression compiler-construction optimization google-closure-compiler

11
推荐指数
2
解决办法
9020
查看次数

如何在Closure Compiler中将node_modules定义为externs?

我有一个Node.js项目,我想用Closure Compiler编译.我不希望它在浏览器中运行/使用browserify.我主要想要类型检查的实用程序.我最初使用以下代码使编译器正常工作:

java -jar compiler.jar -W VERBOSE 
                       --language_in ECMASCRIPT5_STRICT 
                       --externs closure-externs.js 
                       --js="lib/**.js"
Run Code Online (Sandbox Code Playgroud)

其中closure-externs.js手动定义的变量和我是从Node.js的一个相当原始的方式使用该功能:

// closure-externs.js

/** @constructor */function Buffer(something){}
function require(path){}
var process = {};
[...]
Run Code Online (Sandbox Code Playgroud)

事实证明,这只能通过纯粹的运气来实现.文件之间没有依赖关系跟踪,因此您可能会遇到返回类型的情况,{Foo}并且编译器会抱怨它不存在(取决于计算机,具体取决于编译顺序).然后我发现我做错了--process_common_js_modules所以应该使用,所以编译器会在我的位置进行依赖跟踪require("foo").我目前正在调用这样的编译器:

java -jar compiler.jar -W VERBOSE 
                       --language_in ECMASCRIPT5_STRICT 
                       --externs externs/fs.js 
                       --js="lib/**.js"
                       --process_common_js_modules 
                       --common_js_entry_module app.js
Run Code Online (Sandbox Code Playgroud)

但这是失败的:

 ERROR - required entry point "module$crypto" never provided
 ERROR - required entry point "module$dgram" never provided
 ERROR - required entry point "module$extend" never provided
 ERROR - required entry point "module$fs" never …
Run Code Online (Sandbox Code Playgroud)

javascript google-closure-compiler node.js

11
推荐指数
1
解决办法
1639
查看次数

Google Closure Compiler 100%打字

如何让我的应用程序在谷歌闭包编译器方面100%打字?

我已经使用jsdoc注释标记了所有内容.甚至可以获得100?我在64.6%

javascript typing google-closure-compiler jsdoc

10
推荐指数
3
解决办法
2406
查看次数

使用闭包编译器删除jQuery的未使用部分

是否可以使用闭包编译器删除jQuery的未使用部分?

我有一个只使用jQuery的网络(json)函数的脚本,我想要一个删除其他所有东西的缩小脚本.

我试过调用它:

    java -jar compiler.jar --compilation_level=ADVANCED_OPTIMIZATIONS --js=jquery-latest.js --js=my_script.js  --js_output_file=out.js
Run Code Online (Sandbox Code Playgroud)

但我最终得到的文件不小于常规的缩小jQuery源代码.

编辑:我应该提一下背后的原因.此脚本将包含在第三方网站中,它需要更高版本的jQuery(1.5或1.6).我认为最简单的处理方法是将最新版本捆绑在脚本中(仅适用于我的脚本,而不是触及window.jQuery),删除未使用的部分以减小大小.这样,如果他们已经有了旧版本的jQuery,它就不会干涉.

jquery minify google-closure-compiler

10
推荐指数
2
解决办法
4787
查看次数

如何在Google Closure Compiler Service API中使用language_in或jscomp_off

是它在某种程度上可以通过命令行标志像--language_in=ECMASCRIPT5--jscomp_off=internetExplorerChecks到谷歌关闭编译服务API?我在Service API Reference中找不到它.

作为参考,jscomp_off记录在警告中,language_in并记录在JavaScript中.

javascript google-closure-compiler

10
推荐指数
1
解决办法
6267
查看次数