webpack-contrib / webpack-bundle-analyzer

Webpack plugin and CLI utility that represents bundle content as convenient interactive zoomable treemap
MIT License
12.56k stars 483 forks source link

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

Open sahariko opened 2 years ago

sahariko commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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

sahariko commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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

thecristen commented 2 years ago

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 commented 2 years ago

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 commented 1 year ago

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

valscion commented 1 year ago

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 commented 1 year ago

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

valscion commented 1 year ago

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 ☺️