Ole
Ole

Reputation: 47018

Can the Angular production build not shorten class names?

Is it possible to tell the Angular production build not to shorten class names?

Something like `ng serve -o --prod=true --abbreviateClassName=false

The issue I'm having is that I'm using this library:

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

It allows us to decorate class properties in order to validate them.

Since Angular shortens the class names I'm getting errors like this:

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

The decorators are keyed by ConstructorName_propertyName and since the Angular production build shortens the name this introduces conflicts when creating the validation contexts per the decorators.

Upvotes: 4

Views: 1239

Answers (1)

Reactgular
Reactgular

Reputation: 54791

You can try disabling optimization:

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

ng serve --prod --optimization=false

There is also an optimization flag for the builder configuration in the angular.json file:

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

I'm not exactly sure if this flag is the same as the above.

I'm sure this will increase the bundle sizes. There aren't any finer grain controls here for this sort of thing, and I don't think a custom builder will help.

We haven't had the ng eject option to create a custom WebPack build for a while, but you might find some online examples of how to do it manually. It'll be a pain to update when Angular 9 comes out.

Maybe this library you're using was intended for NodeJS and not web browsers.

Upvotes: 4

Related Questions