2017-07-18 133 views
0

我有一個簡單的TypeScript類,我將其轉換爲ES5,然後與webpack 2捆綁在一起,並使用UgilfyJS3最小化。UglifyJS不會在TypeScript生成的JavaScript中修改函數名稱

我希望UgilfyJS也可以修改函數名showGreeting()(見下面的代碼),但是在縮小的js文件中,它不是。有沒有其他選項可以設置縮小函數名稱,還是我正在做一些操作? 我知道變量名不會被破壞,但爲什麼不是函數名?

原來這裏是打字稿文件:

export class Greeter { 
    constructor(greeting: string) { 
     this.greeting = greeting; 
    } 

    greeting: string; 
    showGreeting() { 
     console.log(this.greeting); 
    } 
} 

const myGreeter = new Greeter("hello, world"); 
myGreeter.greeting = "howdy"; 
myGreeter.showGreeting(); 

這是包括UglifyJS的webpack.config:

const path = require('path'); 
const webpack = require('webpack'); 
const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); 
module.exports = { 
    entry: './test.ts', 
    output: { 
     filename: 'bundle.js', 
     path: path.resolve(__dirname, 'dist') 
    }, 
    devtool: "source-map", 
    resolve: { 
     extensions: ['.ts', '.tsx', '.js'] 
    }, 
    module: { 
     loaders: [ 
      { test: /\.tsx?$/, loader: 'ts-loader' } 
     ] 
    }, 
    plugins: [ 
     new UglifyJSPlugin({ 
      mangle: { 
       toplevel: true, 
       eval: true 
      } 
     }), 
] 
}; 

而生成的輸出的Javascript包含以下行:

[function (e, t, r) { 
      "use strict"; 
      Object.defineProperty(t, "__esModule", { 
       value: !0 
      }); 
      var n = function() { 
       function e(e) { 
        this.greeting = e 
       } 
       return e.prototype.showGreeting = function() { 
        console.log(this.greeting) 
       }, 
       e 
      } 
      (); 
      t.Greeter = n; 
      var o = new n("hello, world"); 
      o.greeting = "howdy", 
      o.showGreeting() 
     } 
    ]); 

回答

3

類成員是對象屬性,並且UglifyJS不會破壞屬性名稱。這裏是an explanation

來自Google的Closure編譯器可以完成這項工作。但它很難使用,with limitations