【问题标题】:Can the Angular production build not shorten class names?Angular 生产版本不能缩短类名吗?
【发布时间】:2020-04-23 13:27:39
【问题描述】:

是否可以告诉 Angular 生产版本不要缩短类名?

类似 `ng serve -o --prod=true --abbreviateClassName=false

我遇到的问题是我正在使用这个库:

https://github.com/fireflysemantics/validator/

它允许我们装饰类属性以验证它们。

由于 Angular 缩短了类名,我收到如下错误:

main.2876a5e2eb85f08784d9.js:1 Uncaught Error: The ValidationContainer 
      already contains context with signature t_e_sku.
    at Function.t.addValidationContext 

装饰器由 ConstructorName_propertyName 键入,并且由于 Angular 生产版本缩短了名称,这会在为每个装饰器创建验证上下文时引入冲突。

【问题讨论】:

    标签: javascript angular typescript angular-cli typescript-decorator


    【解决方案1】:

    您可以尝试禁用优化:

    https://github.com/angular/angular-cli/wiki/build

    ng serve --prod --optimization=false
    

    angular.json 文件中还有一个用于构建器配置的optimization 标志:

          "architect": {
            "build": {
              "builder": "@angular-devkit/build-angular:browser",
              "options": {
                "optimization": false
    

    我不确定这个标志是否与上面的相同。

    我确信这会增加捆绑包的大小。对于这类事情,这里没有任何更精细的控件,我认为自定义构建器不会有帮助。

    我们已经有一段时间没有使用ng eject 选项来创建自定义 WebPack 构建,但您可能会在网上找到一些手动操作的示例。 Angular 9 出来后更新会很痛苦。

    也许您使用的这个库是为 NodeJS 而不是 Web 浏览器设计的。

    【讨论】:

    • 谢谢 - 我会试一试! - 我是这个库的作者,所以它绝对是为浏览器设计的 :)
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 2020-06-10
    • 2019-05-10
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多