Закрытие компилятора экспортирует все прототипы и статические методы - PullRequest
4 голосов
/ 14 февраля 2011

Есть ли у компилятора замыкания простой способ экспортировать класс и все его прототипы и статические методы и сохранять имена в виде открытого API? По умолчанию расширенный параметр переименовывает все переменные, но вы можете экспортировать данные в глобальную область, например:

window['MyClass'] = MyClass;

Однако, это только экспортирует MyClass в глобальную область, все прототипы и статические методы переименовываются. Можно подумать, что вы можете просмотреть прототипы и экспортировать их, но нет:

for (var i in MyClass.prototype) {
    window['MyClass'].prototype[i] = MyClass.prototype[i];
}

Это не работает. Единственный способ, которым я знаю, - это добавить их вручную так:

window['MyClass'].prototype['myFunction'] = MyClass.prototype.myFunction;

Я хочу раскрыть около 50 прототипов, поэтому этот метод не является предпочтительным. Кто-нибудь знает, как экспортировать весь класс удобным способом?

Ответы [ 2 ]

1 голос
/ 20 октября 2011

То, что вы описываете, на самом деле предназначено для externs: Запрет компилятору Google Closure от переименования объектов настроек

Пример большого файла externs можно посмотреть здесь: http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/jquery-1.6.js

Вы можете оставить все комментарии и просто использовать такие выражения, как:

jQuery.prototype.add = function(arg1, context) {};

Чтобы убедиться, что метод add не переименован.Вам нужно либо включить @externs в комментарии файла externs, либо передать его как --externs в Closure Compiler, чтобы все работало правильно.

1 голос
/ 14 февраля 2011

Ознакомьтесь с аннотацией @export, описанной в руководстве по стилю JavaScript: http://google -styleguide.googlecode.com / svn / trunk / javascriptguide.xml? Showone = Комментарии # Комментарии

...