Skip to content
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

TypeError: Cannot read property 'forEach' of undefined #490

Open
sahariko opened this issue Jan 23, 2022 · 14 comments
Open

TypeError: Cannot read property 'forEach' of undefined #490

sahariko opened this issue Jan 23, 2022 · 14 comments

Comments

@sahariko
Copy link

Issue description

When running the CLI on a stats file (not all stats files, just some), I'm getting the following error, and the following error only:

Could't analyze webpack bundle:
TypeError: Cannot read property 'forEach' of undefined

It's not a lot to go on, there aren't any helpful hints or file names in which it crashes.

Technical info

System:
    OS: macOS 11.6
    CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
    Memory: 3.08 GB / 16.00 GB
    Shell: 5.8 - /bin/zsh
  Binaries:
    Node: 12.22.0 - ~/.nvm/versions/node/v12.22.0/bin/node
    Yarn: 1.22.17 - ~/.nvm/versions/node/v12.22.0/bin/yarn
    npm: 6.14.15 - ~/.nvm/versions/node/v12.22.0/bin/npm
  npmPackages:
    terser-webpack-plugin: 5.1.3 => 5.1.3 
    webpack: 5.64.1 => 5.64.1 
    webpack-cli: 4.7.2 => 4.7.2 
    webpack-dev-server: 4.7.3 => 4.7.3 
    webpack-manifest-plugin: 3.1.1 => 3.1.1 

Debug info

Using the CLI - npx webpack-bundle-analyzer@latest stats.json, with the following plugins:

@valscion
Copy link
Member

on a stats file (not all stats files, just some),

Are you able to post a stats file that causes this issue?

It's possible that some presence checks are needed where we use .forEach. It's possible that when usage of lodash was made smaller, there now is less protection against some data missing and .forEach still being called on them:

@sahariko
Copy link
Author

I don't think it would be possible, since it's a proprietary codebase 😕

@sahariko
Copy link
Author

sahariko commented Jan 24, 2022

But if it helps in any way we're exporting an array.

When returning an array we're getting .filter errors, when returning an object (Webpack config), we're getting the .forEach error.

If I had to take a shot I would assume these lines are problematic:

https://github.com/webpack-contrib/webpack-bundle-analyzer/pull/395/files#diff-cc250993338f2c875d952782d3e6e5465c510ee355a68adb9f8f1ccd5d446823L51

https://github.com/webpack-contrib/webpack-bundle-analyzer/pull/395/files#diff-cc250993338f2c875d952782d3e6e5465c510ee355a68adb9f8f1ccd5d446823L210

@valscion
Copy link
Member

We can't fix it unless we can make a test case. Otherwise we're likely to break the fix in a future release if we don't have test coverage.

@sahariko
Copy link
Author

I completely understand, but I think that more explicit errors can be very helpful, for example check if bundleStats.assets is defined, and if it isn't print a more helpful error message, maybe with a possible reason as to why it's undefined.

TypeError: Cannot read property 'forEach' of undefined

Is very cryptic, and doesn't even help me understand if there's an issue with this package, my config, or something else.

@valscion
Copy link
Member

That is an error that merely comes because something is undefined and then .forEach is getting called on it. We need to know what is undefined to fix it, or to even add a better error message if we can't fix it.

Without a stats JSON file, we don't know what is undefined and we can't write tests that would ensure we don't regress any error message feature or a test fix in the future.

@ilias-t
Copy link

ilias-t commented Jan 31, 2022

Here's a compilation-stats.json file that repros the issue (apologies for it being rather large)
compilation-stats.json.zip

@thecristen
Copy link

hi. here's a stats.json file that produces this error, using latest webpack, webpack-cli, webpack-bundle-analyzer:

Could't analyze webpack bundle:
TypeError: Cannot read property 'filter' of undefined

stats.json.zip

@tiagoevanp
Copy link

tiagoevanp commented May 31, 2022

Probably the problem is with the stats.json file and what is declared on webpack file that will generate json file. here you can find the possible configurations for stats conf. Maybe with a 'normal' config the problem should be gone...

"The stats option lets you precisely control what bundle information gets displayed."

@sebastian-nowak
Copy link

Any updates on this? This is still an issue in the latest lib version, and it makes it unusable.

@valscion
Copy link
Member

valscion commented Mar 1, 2023

If someone is able to create a pull request that reproduces this case with a test case and also fixes it then I'll consider accepting it ☺️

@sahariko
Copy link
Author

sahariko commented Mar 1, 2023

@valscion Don't know about a fix, but both @ilias-t and @thecristen provided Zip files with a reproducible error.

@valscion
Copy link
Member

valscion commented Mar 2, 2023

Yes, I asked about a reproduction as a test case and creating a pull request that aims to fix this bug.

I don't have time right now to tackle this and it seems that this isn't affecting too many people right now. The quickest way to get this fixed is to help in fixing it as part of open source ☺️

@Ismaestro
Copy link

Ismaestro commented Sep 26, 2024

Ok, so as an alternative, use source-map-explorer...

# package.json scripts section

"bundle-report": "ng build --configuration=production-sourcemaps && source-map-explorer dist/angularappname/browser/**/*.js"
# angular.json

"configurations": {
   ...
   "production-sourcemaps": {
      "sourceMap": true,
      "outputHashing": "all"
   },
   ...
}

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

No branches or pull requests

7 participants