我正在尝试使用Google Closure Compiler根据将要运行的位置(在服务器上与客户端)通过单个变量来分割我的应用程序代码.在这个例子中,将要在服务器上调用的所有内容都在isServerSidevar之后,但是,正在为客户端编译代码.所以我将设置isServerSide为false并让编译器删除客户端不会运行的所有内容...
里面app.js:
goog.provide('my.app');
my.app.log = function(message) {
document.write(message);
}
my.app.initClientSide = function() {
my.app.log('hello client');
}
my.app.initServerSide = function() {
my.app.log('hello server');
}
if (isServerSide) {
my.app.log('initing server');
my.app.initServerSide()
}else my.app.initClientSide();
Run Code Online (Sandbox Code Playgroud)
里面externs.js:
/**
* @define {boolean} is server side?
*/
var isServerSide=false;
Run Code Online (Sandbox Code Playgroud)
命令:
java -jar bin/compiler.jar --js closure-library/closure/goog/base.js --js app.js --externs externs.js --manage_closure_dependencies true --process_closure_primitives true --summary_detail_level 3 --warning_level VERBOSE --compilation_level=ADVANCED_OPTIMIZATIONS --closure_entry_point my.app
Run Code Online (Sandbox Code Playgroud)
预期产量:
document.write("hello client");
Run Code Online (Sandbox Code Playgroud)
实际产量:
isServerSide?(document.write("initing server"),document.write("hello server")):document.write("hello …Run Code Online (Sandbox Code Playgroud) javascript google-closure google-closure-library google-closure-compiler
我正在向google封闭编译器API服务发出请求:
$content = file_get_contents('file.js');
$url = 'http://closure-compiler.appspot.com/compile';
$post = true;
$postData = array('output_info' => 'compiled_code', 'output_format' => 'text', 'compilation_level' => 'SIMPLE_OPTIMIZATIONS', 'js_code' => urlencode($content)));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($post) {
curl_setopt($ch, CURLOPT_POST, $post);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=UTF-8'));
Run Code Online (Sandbox Code Playgroud)
但请求失败,我从谷歌收到此错误消息:
Error(18): Unknown parameter in Http request: '------------------------------0f1f2f05fb97
Content-Disposition: form-data; name'.
Error(13): No output information to produce, yet compilation was requested.
Run Code Online (Sandbox Code Playgroud)
我查看了标题,并发送了此Content-Type标头:
application/x-www-form-urlencoded; charset=UTF-8; boundary=----------------------------0f1f2f05fb97
Run Code Online (Sandbox Code Playgroud)
不确定添加的边界是否正常?我如何防止这种情况,因为谷歌似乎不喜欢它?
谢谢你,韦斯利
我正在尝试使用Google Closure编译我的一个HTML5项目.我收到了几个我不知道如何解决的错误.事实上,它是相同的错误,但对于不同的变量.
这里有错误消息:
变量窗口是未声明的变量事件是未声明的变量控制台是未声明的变量音频是未声明的
这些变量是Javascript内置变量.如果我直接在命令行中编译同一个项目,它就可以工作.但是,就我而言,我需要使用ant文件(构建过程)来编译这个项目.我的ant构建脚本使用的是我在命令行中使用的相同jar文件.使用选项warnings ="verbose",它不起作用.如果我删除它,它的工作原理.如果我想使用选项警告 - "详细",我该怎么办?请解释我的区别.
有人可以帮帮我吗?谢谢!
google-closure google-closure-library google-closure-compiler
我试图在谷歌闭包编译器中编译我的Js代码,我在这段代码上收到错误
var settings = {
providers: ['A', 'B', 'C'],
interface: 'basic16',
apikey: 'XXXXX-XXXXX-XXXXX-XXXXXXXXXX'
}
Run Code Online (Sandbox Code Playgroud)
错误是
JSC_PARSE_ERROR: Parse error. invalid property id at line 3 character 10
interface: 'basic16',
^
JSC_PARSE_ERROR: Parse error. syntax error at line 3 character 11
interface: 'basic16',
^
JSC_PARSE_ERROR: Parse error. syntax error at line 4 character 8
apikey: 'XXXXX-XXXXX-XXXXX-XXXXXXXXXX'
^
Run Code Online (Sandbox Code Playgroud)
但是这个代码在任何浏览器中都适用于我(chrome,firefox,opera,safari,IE7,8,9)
我有一个复杂的dojo应用程序,可以正常编译,但在使用Google的Closure Compiler进行编译后,我在某些行为方面会有细微差别.
实际上,它非常难以调试,而且我一直无法找到有关使用Google Closure编译和未编译的Javascript之间可能的功能差异的任何信息.
任何人都可以指出我已知的差异的方向,或分享任何类似的经验和从哪里开始寻找的一些想法?
我正在使用Play Framework 2.0(Scala)测试AngularJs.Play使用Closure来最小化Javascript文件.
我的文件如下:
// Define a Module 'todoList' for Angular that will load the views. In this example the views are very simple, it's just to show
// the concept
angular.module('todoList', ['taskDoneFilter', 'todoServices']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/all', {templateUrl: 'assets/angular/all.html', controller: TodoCtrl}).
when('/task/:id', {templateUrl: 'assets/angular/task.html', controller: TaskDetailCtrl}).
otherwise({redirectTo: '/all'});
}]);
// This filter allows us to convert strings. In this case, it adds an extra tick besides a task indicating if it's done or no
angular.module('taskDoneFilter', []).filter('checkmark', function() { …Run Code Online (Sandbox Code Playgroud) javascript google-closure-compiler playframework-2.0 angularjs
我有一个很长的脚本很好地包装成一个,(function() {/.../})()以避免所有类型的名称污染.它是100%打字,零警告.
我发现Google Closure编译器从重新定义开始,i并且j在全局命名空间中感觉既不必要又危险,特别是因为我正在编译一个对命名空间没有干扰的脚本.(编译后的脚本以var i=null,j=!1;我认为的紧凑性原因开头).
我可以想到一个工作就是用它来包装它,--output_wrapper但我想不出谷歌会像这样污染命名空间的原因.
有没有?
比较这些字符串:
{}[0]
[][0]
void 0
Run Code Online (Sandbox Code Playgroud)
为什么Closure Compiler会生成
void 0
Run Code Online (Sandbox Code Playgroud)
什么时候可以产生
[][0]
Run Code Online (Sandbox Code Playgroud)
或者
{}[0]
Run Code Online (Sandbox Code Playgroud)
甚至
[].a
Run Code Online (Sandbox Code Playgroud)
正如 torazaburo 提到的,哪个短了 1 个字符?
到目前为止,闭包编译器(Java版本)在最小化我的js文件方面做得很好。但是最近我一直在尝试编译一个小的service worker js文件,并且发现编译后大小实际上增加了。
我在“最小化”代码中发现了很多类似以下的语句:
$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol
Run Code Online (Sandbox Code Playgroud)
我只是在编译中使用默认值:
$ java -jar compiler.jar service-worker.js > minified.js
Run Code Online (Sandbox Code Playgroud)
从此处的代码(在“ Service Worker的JavaScript”部分中)尝试一下,文件大小从2.6 KB变为7.6 KB!
但是,当我通过在线闭合编译器应用程序运行相同的代码时,我得到的文件要小得多,而没有上述所有类型的语句。
我如何从闭包编译器的本地Java版本中产生相同类型的输出,而不会all肿?
我试图找出谷歌驱动器加载其文件夹内容的路径,从双击文件夹名称到加载该文件夹内容的位置。
我注意到谷歌使用类似的东西:
<div jsaction="click:cOuCgd; contextmenu:mg9Pef; dblclick:FNFY6c; focus:AHmuwe" jsname="LvFR7c" role="row" tabindex="0" aria-selected="false" aria-disabled="false">
Run Code Online (Sandbox Code Playgroud)
有什么作用dblclick:FNFY6c?是FNFY6c函数吗?这整个过程是如何运作的?我一直在尝试使用 Chromes DevTools 来弄清楚这是如何工作的,但似乎找不到FNFY6c任何地方。
我如何知道dblclick:FNFY6c单击时接下来会发生什么?
javascript google-closure-library google-closure-compiler google-chrome-devtools