Сжатие JavaScript, которое сохраняет публичные методы? - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь свернуть созданную библиотеку.К сожалению, поскольку я начал разрабатывать библиотеку несколько лет назад, она не использует какой-либо стандартный способ объявления методов и частных свойств.По сути, мой код выглядит так:

/** @class Sample abstract class. */
myname.space.AbstractClass = function() {

    /** Sample protected property A
      * @private
      */
    this.longNameProtectedPropertyA = 10;

    /** Sample protected property B
      * @private
      */
    this.longNameProtectedPropertyB = 20;
}

/** Sample public method A.
  * @methodOf myname.space.AbstractClass#
  */
myname.space.AbstractClass.prototype.publicMethodA = function() {
    return this.longNamePrivatePropertyA;
}

/** Sample public method B.
  * @methodOf myname.space.AbstractClass#
  */
myname.space.AbstractClass.prototype.publicMethodB = function() {
    return this.longNamePrivatePropertyB;
}

/** @class Sample concrete class.
  * @extends myname.space.AbstractClass
  */
myname.space.ConcreteClass = function() {

    myname.space.AbstractClass.call(this);

    /** Sample protected property C.
      * @protected
      */
    this.longNameProtectedPropertyC = 30;
}
myname.space.ConcreteClass.trickyExtend(myname.space.AbstractClass);

/** Overrides publicMethodB of the base class.
  * @methodOf myname.space.ConcreteClass# */
myname.space.ConcreteClass.prototype.publicMethodB = function() {
    return this.longNameProtectedPropertyC * this.longNameProtectedPropertyB;
}

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

Теперь моя проблема в том, что я хочу минимизировать код.Мне нужно сжать длинные имена частных свойств, но мне нужно сохранить имена открытых методов.

Я пробовал компрессор YUI и компилятор Google Closure.Ни один не работал так, как мне нужно.Либо имена как частных свойств, так и открытых методов были скрыты, либо ни одно из них не было.

Есть ли способ, как это сделать?Я готов потратить много времени, комментируя сотни моих методов / свойств, если это поможет.Есть ли какой-нибудь минификатор, который может мне помочь?

1 Ответ

1 голос
/ 26 марта 2012

Вы можете попробовать переписать, до минимизации, с ассоциативным синтаксисом, например:

myname.space.AbstractClass.prototype['publicMethodA'] = function() {
    return this.longNamePrivatePropertyA;
}
...