Skip to content
This repository has been archived by the owner on Apr 9, 2022. It is now read-only.

BuildOptimizer breaks 3rd party library #937

Closed
Enngage opened this issue May 18, 2018 · 5 comments
Closed

BuildOptimizer breaks 3rd party library #937

Enngage opened this issue May 18, 2018 · 5 comments

Comments

@Enngage
Copy link

Enngage commented May 18, 2018

Bug Report or Feature Request (mark with an x)

- [x ] bug report -> please search issues before submitting
- [ ] feature request

Area

- [x] devkit
- [ ] schematics

Versions

npm 5.6.0
node v8.9.4
Windows (10

Repro steps

I have this simple angular library repo where I use masonry js library. Everything works perfectly fine (demo) as long as buildOptimizer is disabled:

"buildOptimizer": false

However, as soon as I enable it, some animations (not all!) are broken. I'm pretty confident this is not the issue in the masonry js library, rather it seems like build optimizer might be tampering with the code in some way.

Is there a way to 'disable' build optimizer for this library only? Or could this be part of a bigger problem somewhere?

The log given by the failure

No errors/warnings logged anywhere.

Desired functionality

Don't break code of external libraries.

Mention any other details that might be useful

Angular.json

@filipesilva
Copy link
Contributor

This seems like a bug but we'll need to look at a reproduction to find and fix the problem. Can you setup a minimal repro please?

You can read here why this is needed. A good way to make a minimal repro is to create a new app via ng new repro-app and adding the minimum possible code to show the problem. Then you can push this repository to github and link it here.

@Enngage
Copy link
Author

Enngage commented May 18, 2018

Thanks for the response! Sure, I understand - this is the minimal code I could come up with (repo generated with ng new).

To reproduce:

npm i
ng serve --prod

You should see new image appear with no animation each second. When you use either ng --serve or disable the buildOptimizer in angular.json you will see each image nicely appear as expected.

Let me know if you need anything else.

@clydin
Copy link
Member

clydin commented May 21, 2018

This is not actually due to the build optimizer itself but rather a minification setting that is enabled when the build optimizer is enabled. Specifically the pure_getters option of UglifyES (here). Either masonry or one of its dependencies is using a property getter that contains side effects; or there is a defect within UglifyES that is improperly removing code).

@Enngage
Copy link
Author

Enngage commented May 26, 2018

Forgive my ignorance, but I wasn't able to find exactly what the pure_getters actually mean in real world. How would you identify such 'invalid' pure getter?

Isn't there a possibility of excluding libraries from the build optimizer? I think it might make sense for you to be able to specify if some library should be skipped so that you can still leverage build optimizer for the rest of your code.

@alexeagle
Copy link
Contributor

This issue was moved to angular/angular-cli#12096

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants