我知道Google Closure Compiler会进行类型检查 - 但有没有其他选择,最好不要与库和优化器紧密结合?
如果没有,有没有办法让Google Closure Compiler 只进行静态分析?
(通过这里的静态分析,我的意思是定义参数的类型等等,如果我输入错误或传递错误的类型,我可以运行某些东西给我警告.)
我需要在Closure编译器上设置language_in选项以防止IE8解析错误:
错误 - 解析错误.IE8(及以下)将错误地解析数组和对象文字中的尾随逗号.如果您要定位较新版本的JS,请设置相应的language_in选项.
我确实在封闭组中找到了与此相关的帖子,但是,该选项直接在java编译器上设置,而不是通过其中一个构建脚本.我需要能够在构建脚本上设置它.
我正在关闭/ bin/build /中的脚本,那里有几个.我尝试将选项添加到闭包构建器,但它失败了.
有人可以指导我如何正确设置此选项吗?
谢谢.
我想在我们正在使用的javascript源代码上使用google封闭编译器.在开发模式中,我们倾向于将功能分解为大量文件,但是对于生产而言,它们希望将它们组合到模块中.
在调用编译器时,我可以给它一个要包含的文件列表进行编译,但是它的输出显示编译器没有保存文件列表的顺序.
我搜索了它,发现我可以使用goog.provide/good.require来控制不同js文件之间的依赖关系.问题在于它为我的js添加了我不需要或不想要的代码,例如:
goog.provide("mainFile")
Run Code Online (Sandbox Code Playgroud)
将添加这个:
var mainFile = {};
Run Code Online (Sandbox Code Playgroud)
到编译的js文件,我不想要的东西.我们根本没有使用谷歌闭包库,我想要使用的只是编译器.
有没有办法告诉编译器文件的顺序,而不包括我不需要的更多"闭包库"功能?我当然可以创建一个我自己的工具,它将首先获取所有文件,将它们组合成一个然后将成为编译器输入的文件,但如果它可以由编译器本身完成,我宁愿无效.
目标是能够像这个线程中的答案一样生成模块:使用Closure Compiler中的--module选项创建多个输出文件
所以我想补充一点,就是能够控制哪些文件进入哪个模块,同时控制他们的订单.现在我不使用通配符,但我计划将来这样做(如果可能的话).
简单地说"cat file1.js file2.js> combined.js && compile ..."很好,但在我们的例子中它有点复杂,我们必须编写一个基于某些逻辑来执行该操作的程序/脚本.如果我们能以某种方式告诉编译器高级文件的顺序,它可能只是节省实现这样一个程序的时间.
谢谢.
我正在考虑将TypeScript结合客户端MVC(很可能是Backbone.js+ Marionette.js或Ember.js)用于未来的项目,因此有一些与性能和优化相关的问题:
TypeScript输出与原生JavaScript性能相比如何?
既然asm.js是JavaScript的子集,是否可以将TypeScript代码转换为asm.js代码?如果是的话,它已经可以吗?
创建TypeScript与之一起使用的AMD项目的构建是否可行且仍然有用Google Closure compiler?
TypeScript平均添加多少开销,文件大小明智?
例如Backbone.js,在小型项目中使用轻量级库时.TypeScript在文件大小方面使用是否有意义?
我喜欢额外的好处,TypeScript但我不想牺牲性能来编码风格和打字.
任何有关TypeScript在大型项目中使用的文章/书籍,特别是与性能,优化和构建相关的内容都非常受欢迎!
先感谢您 !
javascript performance google-closure-compiler typescript asm.js
有人知道如何将Google封闭编译器与Eclipse IDE集成吗?我试图做的是将Google封闭编译器配置为Eclipse IDE的外部工具.然后我就可以在IDE中运行闭包编译器并通过单击缩小我的Javascript文件.有人解决了这个问题吗?
我最近开始使用jsdoc注释来记录我们的javascript代码,但是我发现@param标记的使用存在矛盾的例子.
请参阅https://code.google.com/p/jsdoc-toolkit/wiki/TagParam(PascalCase)
和https://developers.google.com/closure/compiler/docs/js-for-compiler(camel/lowercase).
camelCase对我来说很有意义:
var foo = 1;
console.log(typeof foo); // outputs "number"
Run Code Online (Sandbox Code Playgroud)
什么是用于jsDoc @param评论的正确套管?或者没关系?我打算将它用于文档生成以及通过谷歌闭包运行代码以进行类型检查.
谢谢!
亲爱的朋友们,Closure Compiler在高级模式下给出了这个警告,下划线 {this.
JSC_USED_GLOBAL_THIS:在第200行字符33处危险使用全局此对象
hovers[i4].onfocus = function() {this.className += "Hovered";}
JSC_USED_GLOBAL_THIS:在201行第32行危险地使用全局此对象
hovers[i4].onblur = function() {this.className = this.className.replace(/Hove...
JSC_USED_GLOBAL_THIS:在201行第49行危险使用全局此对象
hovers[i4].onblur = function() {this.className = this.className.replace(/Hove...
JSC_USED_GLOBAL_THIS:在第218行字符38处危险使用全局此对象
buttons[i5].onmouseover = function() {this.className += "Hovered";}
Q1.这有什么危险吗?
Q2.我应该改变吗?
Q3.如何改进/解决此代码?
MERCI!
我尝试使用Closure Compiler压缩我的javascript代码,并且编译代码生成了这两个错误:
JSC_TRAILING_COMMA:解析错误.IE8(及以下)将错误地解析数组和对象文字中的尾随逗号.如果您要定位较新版本的JS,请设置相应的language_in选项.在第379行字符0 fontFamily:jqTextareaDiv.css("font-family").replace(/ ["'] {1}/gi,""),
JSC_TRAILING_COMMA:解析错误.IE8(及以下)将错误地解析数组和对象文字中的尾随逗号.如果您要定位较新版本的JS,请设置相应的language_in选项.在第932行字符0 fontFamily:jqDiv.css("font-family"),
这两个错误似乎引用了这段代码:
var jqTextareaDiv = obj.target.parent().parent(),
style = { // the current, relevant style rules for the DIV nesting the textarea
fontFamily : jqTextareaDiv.css("font-family").replace(/["']{1}/gi,""),
fontSize : jqTextareaDiv.css("font-size"),
fontStyle : jqTextareaDiv.css("font-style"),
fontWeight : jqTextareaDiv.css("font-weight"),
textDecoration : jqTextareaDiv.css("text-decoration"),
textAlign : jqTextareaDiv.css("text-align"),
color : jqTextareaDiv.css("color"),
},
jqToolbox = $('#text-edit-toolbox'),
jqIndicators = {
fontFamily : $('#font-family-indicator'),
fontSize : $('#font-size-indicator'),
fontStyle : $('#font-format-indicators .font-style'),
fontWeight : $('#font-format-indicators .font-weight'),
textDecorationUnderline : $('#font-format-indicators …Run Code Online (Sandbox Code Playgroud) 我有一个带有全局对象的javascript文件,不能重命名(_gat来自Google Analytics异步跟踪器).
Google Closure编译器不得重命名此对象,因为Google Analytics会查找具有此特定名称的变量.
我查看了提到的Javascript文档符号:http://code.google.com/closure/compiler/docs/js-for-compiler.html - 但是,我找不到有关"保护"的任何内容变量.
无论我使用简单编码还是高级编译,问题都存在.
如何确保_gat不重命名变量?
javascript compression google-closure google-closure-compiler
大多数人可能都熟悉Google Analytics提供的这一点跟踪代码.
<script>
(
function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
}
)(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-00000000-0', 'auto');
ga('send', 'pageview');
</script>
Run Code Online (Sandbox Code Playgroud)
有趣的是,这个小摘录包含形成单词isogram的参数.此脚本还使用参数声明变量以从最终文件大小中删除一些位.可以说,在编写代码(?)时你不会使用这种模式,所以我的问题是,谷歌如何缩小其代码并且这些技术是否也适用于凡人?
我在网上找到了Stephen Morley的这个例子,其中包含一个看起来像你在缩小它之前写的东西的代码.我接受了这些代码并通过Google自己的Closure Compiler进行高级优化.正如预期的那样,生成的代码与Google Analytics使用的实际脚本完全不同.
(function(){window.b="ga";"ga"in window||(window.a=function(){window.a.q.push(arguments)},window.a.q=[]);window.a.c=(new Date).getTime();var c=document.createElement("script");c.src="//www.google-analytics.com/analytics.js";c.async=!0;var d=document.getElementsByTagName("script")[0];d.parentNode.insertBefore(c,d)})();
Run Code Online (Sandbox Code Playgroud)
这次,即使没有两个额外的命令,代码也更少DRY和更大.
因此,为了澄清,我很好奇Google工程师是如何得出上述结果的(我不认为他们的代码实际上看起来像斯蒂芬的例子中的那个),即使你不是谷歌的一部分,这个过程是否可以复制?先感谢您!
javascript google-analytics minify google-closure-compiler bundling-and-minification
javascript ×8
minify ×3
asm.js ×1
compression ×1
debugging ×1
eclipse ×1
jquery ×1
jsdoc ×1
performance ×1
typescript ×1