javascript - UglifyJS 不会破坏 TypeScript 生成的 JavaScript 中的函数名称

标签 javascript typescript webpack uglifyjs

我有一个简单的 TypeScript 类,我将其转换为 ES5,然后与 webpack 2 捆绑并使用 UgilfyJS3 最小化。

我希望 UgilfyJS 也会破坏函数名称 showGreeting() (参见下面的代码),但在缩小的 js 文件中,事实并非如此。我是否可以设置任何其他选项来缩小函数名称,或者我是否在做一些磨损的事情? 我知道变量名没有被破坏,但为什么函数名没有被破坏?

这是原始的 TypeScript 文件:

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()
        }
    ]);

最佳答案

类成员是对象属性,并且 UglifyJS 不会破坏属性名称。这是an explanation .

Google 的闭包编译器可以完成这项工作。但很难用,with limitations .

关于javascript - UglifyJS 不会破坏 TypeScript 生成的 JavaScript 中的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45163308/

相关文章:

typescript - 类型 'closeTo' 上不存在属性 'Expect'

javascript - Angular 1.5 组件 - 从指令转换后未呈现模板

javascript - Webpack JS 文件中出现意外标记

Javascript for 循环在第一次迭代后停止

javascript - 如何使用 Angular/Typescript 获取波形音乐播放器

javascript - 如何在导入的 typescript 类上调用静态方法?

javascript - 关于webpack中的nodejs路径,webpack如何在typescript中找到模块?

javascript - 导出 2 webpack 配置常量

javascript - webpack css 加载器不工作

javascript - CRUD的save方法引用了错误的URL