Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
google闭包编译jQuery插件_Jquery_Google Closure Compiler - Fatal编程技术网

google闭包编译jQuery插件

google闭包编译jQuery插件,jquery,google-closure-compiler,Jquery,Google Closure Compiler,我正在测试并希望使用“Advanced”选项编译,函数试图查找“a.H”时出错 有没有人尝试过使用这个选项编译jQuery插件,并获得了很好的结果 多谢各位 编辑: 显然,这是对jQuery方法的重新命名,但是是否可以包括jQuery并对所有方法重新命名 编辑 带有“externs_url”选项的代码示例: js输入代码 // ==ClosureCompiler== // @output_file_name default.js // @formatting pretty_print // @

我正在测试并希望使用“Advanced”选项编译,函数试图查找“a.H”时出错

有没有人尝试过使用这个选项编译jQuery插件,并获得了很好的结果

多谢各位

编辑: 显然,这是对jQuery方法的重新命名,但是是否可以包括jQuery并对所有方法重新命名

编辑

带有“externs_url”选项的代码示例:

js输入代码

// ==ClosureCompiler==
// @output_file_name default.js
// @formatting pretty_print
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level QUIET
// @externs_url http://code.jquery.com/jquery-1.5.min.js
// ==/ClosureCompiler==

// ADD YOUR CODE HERE

var test = function($, context) {

  var
    _self = this;

  _self.mymethod = function() {

    var lista = $("a", context);

    lista.attr("target", "_blank");

    return lista.html();

  };


  return {"mymethod":_self.mymethod};

}.call({}, jQuery, context);    
js输出代码

(function(b, c) {
  this.a = function() {
    var a = b("a", c);
    a.attr("target", "_blank");
    return a.html()
  };
  return{mymethod:this.a}
}).call({}, jQuery, context);

当我尝试闭包编译器时,它更改了我访问的函数的名称。因此,当我使用(作为示例)
$.each(//code)
时,编译器将其更改为
$.a(//code)
。我相信这是你的问题。

我认为你必须在应用程序中包含所有脚本,才能跨所有脚本工作。

是的,你必须将jquery.js和plugin.js连接到一个文件中,但目前jquery的某些部分没有使用高级编译选项正确压缩,但是您仍然可以使用简单的编译

我相信jQuery团队很快就会发布一个可以使用高级编译选项编译的版本


如果您对高级编译感兴趣,请查看这些。阅读了em之后,您就会明白为什么某些部分需要更改,然后才能使用高级编译无误地编译em。

我在尝试压缩jQuery插件的自定义JS库时遇到了同样的问题。闭包(除非您给它一个不这样做的理由)只会重命名插件中的任何jQuery库调用。更糟糕的是,它甚至不会警告您(怎么可能呢?它假设您是程序员,知道您在做什么!)解决方案是引用外部js文件(或指向库的url点)。我使用了网络工具:

通过应用Fowloing序言,我成功地编译了该文件:

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level QUIET
// @output_file_name default.js
// @formatting pretty_print
// @externs_url http:// ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js
// @externs_url http:// ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.js
// ==/ClosureCompiler==
剩下的唯一问题是让编译器意识到插件名称不能简化:

(function($) { $.fn.extend({ <name>:function(options) { } }); })(jQuery);
(函数($){$.fn.extend({:函数(选项){}});})(jQuery);

因为这是一个向世界公开的名字。有什么想法吗?

要使用高级选项正确编译jQuery插件,您必须稍微修改一下源代码。所有外部函数都应该使用带引号的字符串,而不是点语法。这将确保闭包编译器保留外部函数名。比如,

$.fn.pluginName = function(opts) {
  // plugin code
}
将编译为

$.a.b=function(){};
这是非常无用的。但是,如果你稍微改变一下来源

$.fn['pluginName'] = function(opts) {
  // plugin code
}
将输出此

$.a.pluginName=function(){};
好多了

jQuery库本身,但您可以使用指定整个jQuery API的闭包编译器外部文件,通过高级优化编译自己的代码。从下载与jQuery版本相关的externs文件。在本例中,我将使用版本1.4.3

以下假设应用程序的代码位于
application.js
中,
compiler.jar
是Google Closure编译器jar文件(可在中获得):


externs文件告诉闭包编译器存在哪些jQuery方法,这样它就知道不需要重命名它们。

是的,但是您可以解决这个问题。因为我包含了jQuery并且失败了。@Maiku Mori谢谢你。我将按照教程查看更多选项。我将jQuery.min与jQuery一起使用。[“Method”]查看我是否使用高级编译来编译脚本。很抱歉,使用“externs\u url”选项可以做到这一点。您很接近,但您没有通过javascript传递库js文件,您需要传递externs文件(使用http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.js代替。我在上有一个更完整的编写过程,我尝试了您发布的代码,它确实有效,但设置了“警告级别安静”这意味着您在编译代码时遗漏了很多问题。我没有意识到这需要一个库文件并尝试查找所有导出。这非常接近,只需更改为即可工作。我已经对下面的外部答案发表了评论。
java -jar compiler.jar \
--compilation_level ADVANCED_OPTIMIZATIONS \
--externs jquery-1.4.3.externs.js \
--js_output_file output.js \
application.js