我有很多时间投入到jquery和用它构建的大型应用程序中.最近我一直在审查Google Closure Library,但此时发现它并不像jquery那样优雅.我相信它可能有一些潜力,并会更多地研究它,但是现在我打算继续使用jQuery作为我的基础框架.
但是,我对Google Closure Compiler印象非常深刻.我希望在我的应用程序的构建过程中开始使用它.遗憾的是,将其用于不遵循标准Google Closure标准的项目并不容易.
在开发基于jquery的项目和使用Google Closure Compiler方面是否有任何最佳实践或良好资源?例如:
使用它编译jquery和jquery-ui是否有意义,还是应该继续在google CDN上指向这些资源?我确定我的jquery和jquery-ui会更小,因为我没有使用库的所有功能,但是指向CDN会增加文件已经存在于访问者缓存中的机会.
我的应用程序被拆分成许多文件,每个函数都有一个文件.我想按照特定的顺序将它们组合在一起,并将它们缩小为我网站上每个部分的文件.我想自动化这个过程.
目前我的项目有一个java后端,并使用Maven构建.将Google Closure Compiler添加到此构建过程中是否有意义?
基本上,我正在寻找任何特定于使用Google Closure Compiler和jQuery的优秀资源.
如果您正在使用模块模式并具有以下内容:
(function () {
"use strict";
// this function is strict...
}());
Run Code Online (Sandbox Code Playgroud)
并使用Google Closure Compiler编译代码,该"use strict";指令不会使其进入编译文件.
那么如何防止Closure Compiler删除ES5/strict指令呢?
(注意,我不想使用强制执行ES5 /严格模式的其他模式,即简单地将"use strict";添加到编译文件的第一行.我想使用此处所述的模块模式.)
javascript google-closure google-closure-compiler ecmascript-5
我有一个与JavaScript缩小相关的奇怪问题,问题是当在文件/assets/javascript/test夹中放置test1.js,test2.js等JavaScript文件并使用以下关闭编译器选项时:
val defaultOptions = new CompilerOptions()
defaultOptions.closurePass = true
defaultOptions.setProcessCommonJSModules(false)
defaultOptions.setPrettyPrint(true)
CompilationLevel.WHITESPACE_ONLY.setOptionsForCompilationLevel(defaultOptions)
Run Code Online (Sandbox Code Playgroud)
它们会被缩小,但这会导致test1.min.js和test2.min.js文件共享相同的代码... ...当在同一页面中使用文件并占用更多磁盘空间时,这将导致一些额外的JavaScript错误.
但是,如果CompilerOptions没有设置,JavaScript会正确编译而不会重复,但编译级别太严格,我们的JavaScript会停止工作,因为它会显示有关这些文件中写入的某些内容的错误.总的来说,缩小过程激活太晚,无法修复所有项目js文件以使用默认编译器选项,因此现在只有选项将其配置为使用轻微缩小而不使用js重复的方式..对此问题的任何帮助都将非常感谢!
我正在使用Play Framework 2.1.1和Java项目.
javascript google-closure-compiler playframework-2.0 playframework-2.1
我正在撰写Google Chrome扩展程序.由于JavaScript文件是从磁盘加载的,因此它们的大小几乎不重要.
无论如何,我一直在使用Google Closure Compiler,因为显然它可以进行性能优化以及减少代码大小.
但是我在Closure Compiler的输出顶部注意到了这一点:
var i = true, m = null, r = false;
Run Code Online (Sandbox Code Playgroud)
这一点显然是为了减少文件大小(整个脚本中true/ null/的所有后续使用false都可以用单个字符替换).
但肯定会有轻微的性能影响吗?读取文字true关键字比按名称查找变量并找到它的值必须更快true...?
这种性能打击值得担心吗?谷歌闭包编译器还有什么可以实际上减慢执行速度吗?
是否有任何项目一起使用node.js和closure-compiler(简称CC)?
CC的官方建议是一起编译应用程序的所有代码,但是当我编译一些包含a的简单node.js代码时require("./MyLib.js"),该行直接放入输出中,但在该上下文中没有任何意义.
我看到几个选项:
我通过用于Google Closure Compiler的Node.js包装器创建了一个连接的缩小文件.当我在Google Chrome中打开开发者工具时,源地图和映射文件都会正确加载.
我遇到的一个问题是,断点不会在源映射文件中触发,就像它们运行未经分析的单独文件会话一样.有时我会尝试在脚本中放置一个断点,它会向下跳几行,而不是我试图设置它.但最令人沮丧的是,当我可以设置断点时,它们不会被触发!我将在我知道正在调用的函数中间设置一个,但脚本永远不会暂停执行.
编辑
我在Ubuntu 13.10上运行Chrome 31.0.1650.57.我也无法在Firefox 25.0中使用它.
javascript debugging google-chrome google-closure-compiler source-maps
我注意到,我每次使用的时间谷歌的关闭编译服务,它留下的呈现在页面的右侧编译代码的一些不必要的空格.这些对应于已编译代码的托管版本中的换行符.
例如(注意换行符,每个换行符似乎都是不必要的):
http://troy.onespot.com/static/stack_overflow/closure_spaces.js
到目前为止,我刚刚手动删除它们,但我很好奇他们为什么会在那里.是否限制代码托管版本的行长度使其更具可读性?编译器是否足够聪明,可以有意留下或插入那些以最大化GZIP压缩工作?
我知道他们对文件大小琐碎的影响,但有这么多的努力进入源脚本,每个字节涅槃,它为什么他们有违反直觉.
是否可以添加本地SourceMap?我有一个我无法修改的网站,包含压缩(闭包)JavaScript.我有一个属于该文件的本地JavaScript-SourceMap.有没有办法告诉GoogleChrome(或任何其他浏览器)在页面加载之前/之后添加SourceMap?
我正在创建一个相当大的JavaScript库,使用Closure Compiler进行精彩的压缩以及类型检查和警告系统.
我想创建多个输出文件,因为文件是异步加载的(有些文件只是按需加载).
在源代码中查找,我找到了--module标志,以及一些相关的标志.源代码说明了以下选项:
一个javascript模块规范.格式是
<name>:<num-js-files>[:[<dep>,...][:]]].模块名称必须是唯一的.每个dep都是此模块所依赖的模块的名称.必须按依赖顺序列出模块,并且必须按相应的顺序列出js源文件.当--module国旗出现在有关--js的标志是不重要
......这就是我能找到的全部.我想更多地了解如何使用此选项,有没有人有这方面的经验?或者,如果有另一种方法来创建多个输出文件,我会全神贯注.
如果我给Closure Compiler这样的话:
window.array = '0123456789'.split('');
Run Code Online (Sandbox Code Playgroud)
它"编译"它:
window.array="0,1,2,3,4,5,6,7,8,9".split(",");
Run Code Online (Sandbox Code Playgroud)
现在你可以说,这更大.Closure Compiler是否有任何理由这样做?
javascript ×8
minify ×2
browser ×1
debugging ×1
ecmascript-5 ×1
jquery ×1
node.js ×1
optimization ×1
require ×1
source-maps ×1