保留公共方法的JavaScript压缩

JavaScript compression that preserves public methods?

本文关键字:JavaScript 压缩 方法 保留      更新时间:2023-09-26

我正在尝试最小化我创建的库。不幸的是,因为我几年前就开始开发这个库,所以它没有使用任何标准的方法来声明方法和私有属性。基本上,我的代码看起来像:

/** @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压缩器和谷歌的闭包编译器。两者都没有达到我的要求。私有属性和公共方法的名称要么都被混淆了,要么都没有。

有办法做到这一点吗?如果有帮助的话,我准备花很长时间注释数百个方法/属性。有什么小人物可以帮我吗?

在最小化之前,您可以尝试使用关联语法进行重写,例如:

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