【问题标题】:angular ng build --prod does not keep the name of the class (MyClass.constructor.name)angular ng build --prod 不保留类的名称(MyClass.constructor.name)
【发布时间】:2019-05-11 10:04:02
【问题描述】:

在 Angular 7 生产模式下编译时,我无法保留类名。我尝试了 Terser 插件的不同参数,但没有一个能解决这个问题。 这个问题有解决方案吗?或者是否有 MyClass.constructor.name 的另一种替代方法。

提前谢谢你

自定义 Webpack 配置下方

const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
    optimization: {
        minimizer: [
            new TerserPlugin({
                parallel: true,
                terserOptions: {
                    keep_classnames: true,
                    mangle: false
                }
            })
        ]
    }
};
  • @angular-builders/custom-webpack": "^7.1.1"
  • @angular-devkit/build-angular": "^0.11.2"
  • @angular/cli": "^7.0.4",

【问题讨论】:

    标签: angular typescript webpack


    【解决方案1】:

    与任何其他优化的 Javascript 代码一样,生产模式下的 Angular 应用程序会经历一个缩小过程,将所有类、函数和变量名称更改为最小名称(通常是一个字母),以减少加载的包大小。因此,您不能依赖 MyClass.constructor.name 并将其与静态值进行比较。

    【讨论】:

    • 但是有一个选项可以在缩小过程中保留类名。我需要类名,因为我将类保存在本地存储中,因此它们是字符串化的。现在我需要稍后重新实例化它们,但为此我需要知道类的名称。
    • 您是否测试过您的配置是否被考虑在内?据我所知,使用 CLI 进行构建时无法调整 webpack。
    • 是的,我在代码中添加了隐藏控制台消息(console.*)的选项,这个选项可以正常工作。
    • 有人找到解决办法了吗?
    • @DavideBoldrin MyClass.constructor.name 的干净替代品是myVar instanceof MyClass
    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多