Angular 生产版本不能缩短 class 名称吗?

Can the Angular production build not shorten class names?

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

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

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

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

它允许我们修饰 class 属性以验证它们。

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

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

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

您可以尝试禁用优化:

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

我不确定这个flag是不是和上面的一样

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

我们有一段时间没有 ng eject 选项来创建自定义 WebPack 构建,但您可能会找到一些关于如何手动执行此操作的在线示例。 Angular 9 出来的时候更新会很痛苦。

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