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

"RangeError: Maximum call stack size exceeded" when compiling a file with many requires #689

Closed
Gobie opened this issue Mar 7, 2018 · 7 comments

Comments

@Gobie
Copy link

Gobie commented Mar 7, 2018

Do you want to request a feature or report a bug?
Bug

What is the current behavior?
Given CSS file with 10000 or more classes with URLs, in our case generated from sprites.

...
.classN { ... background-image: url(./path/to/sprite.png); ... }
...

The css-loader creates such a JS file, which on compile throws RangeError: Maximum call stack size exceeded.

...
exports.push([
  module.id, 
  ".class0 { background-image: url(" +
  escape(require("./path/to/sprite.png")) +
  "); }.class1 { background-image: url(" +
  escape(require("./path/to/sprite.png")) +
  ...
])

What is the expected behavior?
The expected behaviour is to generate a JS file, which can be compiled and executed.

Please mention other relevant information such as your webpack version, Node.js version and Operating System.
Reproducible on 0.28.10, Node 6.11.3 & Node 8.9.4.

Technical details
The issue is that URLs are replaced by requires and cssAsString in loader.js is built by string concatenation "..." + "..." + ... + "..." which has upper limit in each version of v8, given by it's default stack size.

Experimentally measured:

  • node 6.11.3 has ~6250 strings,
  • node 8.9.4 has ~3285 strings.

The fix is straightforward, group the string concatenations by fixed amount so it can be compiled using default stack size. ("..." + ... + "...") + ("..." + ... + "...")

@alexander-akait
Copy link
Member

@Gobie
Copy link
Author

Gobie commented Sep 17, 2018

fixed in https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md#02811-2018-03-16

@evilebottnawi I believe this is a mistake, it refers issue #698, while this is #689.

@alexander-akait
Copy link
Member

@Gobie problem still exists?

@Gobie
Copy link
Author

Gobie commented Sep 17, 2018

It does on 1.0.0. Test case can be found in attached commit https://github.com/Gobie/css-loader/commit/ced2c0dc24e2a0af1ea39e1d30a5d5b8e26ffb3f with "half-baked" solution.

@Gobie
Copy link
Author

Gobie commented Sep 17, 2018

I mistakenly closed the related pull request #690 back in July, but it is still reproducible.

@alexander-akait
Copy link
Member

@Gobie Can you create new issue with minimum reproducible test repo?

@Gobie
Copy link
Author

Gobie commented Sep 17, 2018

I created #771 with minimal test-case to verify that it is broken.

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

No branches or pull requests

2 participants