externs для плагина jQuery Star Rating и компилятора Google Closure

Я создал файл externs, чтобы иметь возможность скомпилировать плагин jQuery Star Rating Plugin fyneworks.com/jquery/star-rating/#tab-Testing с ADVANCED_OPTIMIZATIONS компилятора Google Closure.

Но, несмотря на то, что я ссылаюсь на стандартный jQuery extern, знак «$» переименовывается, что нарушает работу плагина.

Возможно, это связано с тем, что если я использую неизмененный плагин, «рейтинг» также переименовывается. Я могу исправить эту часть с помощью:

$.fn['rating'] = function(opts) {

из google closure compile jQuery Plugin ... но это не исправляет '$' (и было бы неплохо использовать неизмененный плагин, если это возможно).

из моей попытки внешнего (что, вероятно, неверно и / или неполно):

// ??? for '$'

// this one does NOT prevent 'rating' from being renamed
function rating(arg1) {}

// the following seem to work: they prevent the functions from being renamed
rating.focus = function() {}
rating.blur = function() {}
rating.fill = function() {}
... etc.

командная строка (и rating.sh в загружаемом файле):

java -jar ../compiler-latest/compiler.jar --formatting pretty_print --compilation_level ADVANCED_OPTIMIZATIONS --externs externs/jquery-1.7.js --externs externs/jquery.rating-extern.js --js original/jquery.rating.js --js_output_file jquery.rating.gcc.js

Сообщения об ошибках:

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) {

Для тестирования: http://prefabsoftware.com/test/rating-july15/

Для загрузки: prefabsoftware.com/test/rating-july15.zip

Некоторые полезные ссылки: (которые мне не разрешено указывать как уценку, так как я не мог войти в систему с моими старыми очками репутации ...)

  • Расширенная компиляция и внешние интерфейсы: developers.google.com/closure/compiler/docs/api-tutorial3#externs.
  • образец externs: contrib: code.google.com/p/closure-compiler/source/browse/#svn%2Ftrunk%2Fcontrib%2Fexterns), включая сам jQuery, но не плагин оценки
  • дополнительные внешние: code.google.com/p/closure-compiler/source/browse/#svn%2Ftrunk%2Fexterns

Есть ли простое исправление для внешнего? Или лучшее решение?

Спасибо!


Хорошо, это работает для файла externs:

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

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

person Scott Lawton    schedule 15.07.2012    source источник
comment
Я вижу: мне нужно скомпилировать все, кроме плагина, и просто сослаться на это обычным способом. И большое спасибо за внешние советы; Я добавил рабочий код выше, так как не могу добавить этот комментарий.   -  person Scott Lawton    schedule 18.07.2012


Ответы (2)


Судя по вашему описанию, вы неправильно используете внешний файл. Внешний файл для вашего плагина позволит другим пользователям компилировать код, ссылающийся на ваш плагин. Его вообще не следует использовать для компиляции кода вашего плагина. Для компиляции кода вам понадобится только файл jQuery extern.

У стилей кода jQuery есть известные проблемы с компилятором Closure. В частности, вам следует избегать следующего:

  • Любое использование псевдонима $. Используйте полное пространство имен jQuery. Компилятор плохо обрабатывает пространства имен с псевдонимами.
  • Псевдоним jQuery.fn. Вместо этого используйте jQuery.prototype.
  • Использование метода jQuery.extend для добавления прототипов функций или общедоступных методов. Вместо этого добавьте их прямо в прототип. (пример: jQuery.fn.extend({a: 'foo'}); станет jQuery.prototype.a = 'foo';);

При использовании ADVANCED_OPTIMIZATIONS имейте в виду, что вам все равно придется экспортировать или цитировать любые общедоступные методы и прототипы. Это может означать, что SIMPLE_OPTIMIZATIONS больше подходит для вашего проекта.

Для получения дополнительной информации см. http://blogs.missouristate.edu/web/2011/02/14/jquery-plugins-and-closure-compiler/

person Chad Killingsworth    schedule 16.07.2012

Ознакомьтесь с новейшими внешними версиями: https://github.com/iplabs/closure-compiler/tree/master/contrib/externs

person Jens Peters    schedule 31.03.2013