-
Notifications
You must be signed in to change notification settings - Fork 12k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Angular 6 - Prod build fails with property 'call' of undefined in runtime.js #11129
Comments
After lots of trials and errors and lots of googling I think I solved my problem but the potential solution goes well beyond my understanding and knowledge of angular ... Couldn't understand why for a clean project "ng build --prod" works fine while for my project not but it looks like generating the build with: "ng build --prod --source-map" does the trick. Can't really figure out how --source-map affects the building process for one or more of the packages that generated the error in runtime.js but it seems to work. Just going to investigate a bit more about that (in order to understand if that is really THE solution) before closing the issue. |
@marcotoldo Hi, did you find the cause? I am experiencing currently the same problem. |
Hi @Ludevik unfortunately couldn't find the exact cause and gave it up (... already feeling lucky enough to have been able to generate a running production build using the "--source-map" trick) I'm sure that it has something to do with one or more third-party packages that are installed in the app so I think the best way to isolate the problem would be to create a new empty application and to monitor the generated prod bundle while progressively adding all the third-party packages related to your specific app one at a time. Anyhow even if I found it I already know I couldn't understand why it breaks the build (as far as I know runtime.js should be independent from your own code) since my code worked without any problem with angular 5 (... some days ago I had the pretty bad idea of upgrading to version 6 because I needed the latest Angular Material version). I'm reopening the issue in case anyone else is experiencing the same problem or can make any contribution to solve it. |
I've had the same issue but for me adding |
Same for me, --source-map doesn't help, but at least i see the culprit, it is one of my exported enums from my library. |
I've bisected the issue in my project and it started happening for me since I updated it to use the RxJS 6 import syntax instead of the old v5 one. This was mostly stuff like: -import { merge } from 'rxjs/observable/merge';
+import { merge } from 'rxjs'; and: -import { pairwise } from 'rxjs/operators/pairwise';
-import { filter } from 'rxjs/operators/filter';
-import { take } from 'rxjs/operators/take';
+import { pairwise, filter, take } from 'rxjs/operators'; I've also discovered that calling:
works as well. May it be an UglifyJS issue? |
that's really bad ... that means the build could fail again anytime even in my case ... @mgol thanks for pointing out the rxjs issue. Given that I haven't tried yet generating an empty app (for which --prod works) but with some rxjs stuff that could be the problem. Maybe it's worth trying ... I'll give it a try and report about it in a while.
nice ... never tried it before but I agree with @mgol, it may have something to do with the uglifier |
Just tested out rxjs (cli 6.0.7):
Result: --prod working as expected At least for me rxjs is not the problem but (given that ng build works) I'm convinced that uglifyjs (or the minifier as well) could be the problem as pointed out by @mgol I checked all the options of the ng build but as far as I can see there's no way to enable/disable the uglifier alone, it seems to be "glued" to the optimizer as a whole ... |
EDIT: Sorry, my bad, I was invoking a wrong command. |
@marcotoldo Could you try to add |
@mgol thanks, just gave it a try. Yes, --optimization=false generates a working app but unfortunately I don't see any difference with So far in my case the best I can get is with Here is another trial (suggested here and there for problems related to uglifyjs): change "target" key of your "compilerOptions" of tsconfig.js from "es5" to "es2015". In my case (with |
sorry ... according to cli official doc:
so target "es2015" cannot be used with --prod |
I pinpointed it to the Webpack 4's |
BTW, in my case changing: import { pairwise, filter, take } from 'rxjs/operators';
import { merge } from 'rxjs'; in import { filter, take } from 'rxjs/operators';
import { pairwise } from 'rxjs/operators/pairwise';
import { merge } from 'rxjs'; made the app work again. I suspect this may be pretty random... |
@mgol following your hint I tried removing all rxjs operators from my code (actually was using just 'retry') but no luck ... same "'call' of undefined" error ;-( I'm using some third-party angular modules but as far as I can see none of them uses rxjs. Given my "lucky" use of --source-map and your "lucky" re-writing of the rxjs imports it really looks like the error appears in a non-deterministic way. I'll keep trying to find a solution but given that the problem is related to the optimization stage I really hope a new release of the cli will fix it asap |
ng serve --prod now works for me. I have changed all angular dependencies to 6.0.4 and all dev dependencies to their latest versions:
i have also updated all our code to rxjs 6 version and then added rxjs-compat back because of one dependency, but i don't think it has impact. As soon as i upgrade
to their @next versions i get the same error as before. |
That's because it's a regression introduced in Webpack 4.10.0. |
seems solved since ts-node 7.0.0 |
I have the same error using |
I got the same error but I just killed my |
Fixed via #11488, we shouldn't have a dependency on |
Try for this..
|
edit3: Updating to Angular 7 RC fixed it. See my other comment below. I have this issue even with the latest dependencies. Turning off edit1: I have a suspicion it has something to do with edit2: I'm not so sure about that suspicion now because the angular compiler itself relies on package.json:
yarn.lock
|
Encouraging news. Updating to angular version package.json
|
I'm still experiencing this issue as of CLI 7.0.3. |
I had similar event-related issues when hovering on plots using plot.ly: `ERROR TypeError: "o[a] is undefined". As some of you noticed, the Still these are workarounds and the problem has to be fixed to allow all flags to work as expected. |
Thank you for the tip, @virgile-hogman, it sounded like a good idea. However, for our project it did not work. The only change that did help, was to remove all optimization, which resized our main bundle from Angular version was updated today to Does anyone have any other ideas? |
For info, the issue i had when hovering on plots in prod mode is now solved! In short, maybe the cause is different, but check if you don't have some double minimization going on through your third-party dependencies, that could explain some issues with the prod mode. |
|
I had the same issue with the angular-plotly library. The point looked to be the fact that this library was already calling a minified library (plotly.js in that case) and the double minification was the origin of the problem. The new version (1.0) of angular-plotly solved perfectly the issue. I hope that might help somebody... |
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
"dependencies": {
"@angular/animations": "^6.0.0",
"@angular/cdk": "^6.2.1",
"@angular/common": "^6.0.0",
"@angular/compiler": "^6.0.0",
"@angular/core": "^6.0.0",
"@angular/forms": "^6.0.0",
"@angular/http": "^6.0.0",
"@angular/material": "^6.2.1",
"@angular/platform-browser": "^6.0.0",
"@angular/platform-browser-dynamic": "^6.0.0",
"@angular/router": "^6.0.0",
"@fnando/sparkline": "^0.3.7",
"@types/socket.io": "^1.4.34",
"core-js": "^2.5.4",
"countup.js-angular2": "^6.0.0",
"d3": "^5.3.0",
"d3-cloud": "^1.2.5",
"hammerjs": "^2.0.8",
"isobject": "^3.0.1",
"js-base64": "^2.4.3",
"leaflet": "^1.3.1",
"leaflet.markercluster": "^1.3.0",
"progressbar.js": "^1.0.1",
"rxjs": "^6.0.0",
"scrollmonitor": "^1.2.4",
"simplebar": "^2.6.1",
"socket.io": "^2.1.1",
"zone.js": "^0.8.26"
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.6.7",
"@angular/cli": "^6.0.7",
"@angular/compiler-cli": "^6.0.3",
"@angular/language-service": "^6.0.3",
"@types/jasmine": "^2.8.8",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4",
"codelyzer": "~4.2.1",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "^1.4.3",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "^5.3.2",
"ts-node": "~5.0.1",
"tslint": "~5.9.1",
"typescript": "~2.7.2"
}
runtime.a66f828dca56eeb90e02.js:1 Uncaught TypeError: Cannot read property 'call' of undefined
at p (code snippet: return r[e].call(n.exports,n,n.exports,p),n.l=!0, ... [following])
Working with cli 6.0.7. Same error with cli 6.0.0.
The text was updated successfully, but these errors were encountered: