Jquery plugins jquerystarrating插件和googleclosure编译器的externs

Jquery plugins jquerystarrating插件和googleclosure编译器的externs,jquery-plugins,extern,google-closure-compiler,Jquery Plugins,Extern,Google Closure Compiler,我创建了一个externs文件,以便能够编译jQuery星级插件fyneworks.com/jQuery/Star Rating/#tab,并使用Google Closure编译器的高级_优化进行测试 但是,尽管我引用了标准的jQuery外部程序,“$”被重命名,这破坏了插件 可能相关:如果我使用未修改的插件,“评级”也会被重命名。我可以用以下方法修复该部分: $.fn['rating'] = function(opts) { 从。。。但这并不能修复“$”(如果可能的话,最好使用未修改的插件)

我创建了一个externs文件,以便能够编译jQuery星级插件fyneworks.com/jQuery/Star Rating/#tab,并使用Google Closure编译器的高级_优化进行测试

但是,尽管我引用了标准的jQuery外部程序,“$”被重命名,这破坏了插件

可能相关:如果我使用未修改的插件,“评级”也会被重命名。我可以用以下方法修复该部分:

$.fn['rating'] = function(opts) {
从。。。但这并不能修复“$”(如果可能的话,最好使用未修改的插件)

从我的外部尝试(可能是错误的和/或不完整的):

命令行(和下载中的rating.sh):

错误消息:

Firefox:
$(".star1").rating is not a function
callback: function (value) {
jquery.ratingSampleCode.js (line 9)

Chrome:
Uncaught TypeError: Object [object Object] has no method 'rating'
jquery.ratingSampleCode.js:8
从我的示例代码:

$('.star1').rating({
    callback: function (value) {
要测试:

下载:prefactsoftware.com/test/rating-july15.zip

一些有用的链接:(我不允许将其指定为降价,因为我无法使用旧的信誉点登录…)

  • 高级编译和外部程序:developers.google.com/closure/compiler/docs/api-tutorial3#Externs
  • 外部示例:contrib:code.google.com/p/closure compiler/source/browse/#svn%2Ftrunk%2ftcontrib%2Fexterns)包括jQuery本身,但不包括评级插件
  • 更多外部程序:code.google.com/p/closure compiler/source/browse/#svn%2ftunk%2externs
有一个简单的外部修复程序吗?还是更好的解决方案

谢谢


好的,这适用于externs文件:

$.prototype.rating = function(arg1) {}
jQuery.prototype.rating = function(arg1) {}

$.prototype.rating.focus = function() {}
... etc.

根据您的描述,您似乎未正确使用外部文件。插件的外部文件允许其他用户编译引用插件的代码。它根本不应该用来编译你的实际插件代码。要编译代码,只需要jQuery外部文件

jQuery代码样式在闭包编译器中存在已知问题。特别是,您需要避免以下情况:

  • 使用
    $
    别名。使用完整的
    jQuery
    命名空间。编译器不能很好地处理别名名称空间
  • jQuery.fn
    别名。改用
    jQuery.prototype
  • 使用
    jQuery.extend
    方法添加函数原型或公共方法。相反,直接将它们添加到原型中。(例如:
    jQuery.fn.extend({a:'foo'});
    将变成
    jQuery.prototype.a='foo';
对于高级的_优化,请记住,您仍然需要导出或引用任何公共方法和原型。这可能意味着简单的优化更适合您的项目


有关更多信息,请参见查看最新的外部代码:

我明白了:我应该编译除插件之外的所有内容,并以通常的方式引用它。而且,非常感谢外部提示;我在上面添加了工作代码,因为我无法添加此注释。
$('.star1').rating({
    callback: function (value) {
$.prototype.rating = function(arg1) {}
jQuery.prototype.rating = function(arg1) {}

$.prototype.rating.focus = function() {}
... etc.