Closure Compiler不会从自调用函数中删除死代码

时间:2017-05-05 13:24:32

标签: typescript google-closure-compiler tsickle

我正在编写一个TypeScript应用程序,该应用程序需要两个数字并将数字的总和打印到控制台。

calculator2.ts

export namespace calculator
{
    export function add(a: number, b: number): number
    {
        return a + b;
    }

    export function subtract(a: number, b: number): number
    {
        return a - b;
    }
}

app.ts

import {calculator} from './calculator2';

var answer = calculator.add(3, 4);
console.log('Answer: ' + answer);

我运行tsickle将TypeScript转换为Google Closure Compiler理解的JavaScript。然后我使用高级优化标志运行Closure Compiler来缩小我的代码。

这是输出(漂亮打印):

var a;
(function(d) {
  d.add = function(b, c) {
    return b + c;
  };
  d.a = function(b, c) {
    return b - c;
  };
})(a || (a = {}));
var e = a.add(3, 4);
console.log("Answer: " + e);

这打印7,正如预期的那样,但是calculator.subtract()(缩小代码中的d.a)没有删除,而我没有使用它。

如果我像这样修改calculator文件:

export var calculator: any =
{
    add: function(a: number, b: number): number
    {
        return a + b;
    },

    subtract: function(a: number, b: number): number
    {
        return a - b;
    }
};

Closure Compiler输出:

console.log("Answer: 7");

有没有办法告诉Closure Compiler subtract函数没有被调用(至少不是来自app.ts)并且可以删除它?

另一项测试:

使用'calculator3.ts'

export class calculator
{
    public add(a: number, b: number): number
    {
        return a + b;
    }

    public subtract(a: number, b: number): number
    {
        return a - b;
    }
}

和'app.ts'

import {calculator} from './calculator3';

var myCalculator = new calculator();
var answer = myCalculator.add(3, 4);
console.log('Answer: ' + answer);

产生

var c = (new (function() {
  function a() {
  }
  a.prototype.add = function(a, b) {
    return a + b;
  };
  return a;
}())).add(3, 4);
console.log("Answer: " + c);

哪个删除subtract功能,但未针对console.log("Answer: 7")进行优化(这不是必需的,但会很棒)

0 个答案:

没有答案