Uglifyjs: Latest 3.1.7 gives error with webpack uglify plugin

Created on 5 Nov 2017  路  8Comments  路  Source: mishoo/UglifyJS

Sorry, I don't have too much detail, I've got quite a complex project where I use uglifyjs-webpack-plugin. Today I wanted to build my project and got this error:

Error in {chunk name}.js from Uglifyjs.
undefined

Nothing more, no helpful output whatsoever. I noticed there was a new version of uglifyjs and when I forced 3.1.6, the error was gone.

Most helpful comment

isolated the bug - see #2442

All 8 comments

Closing for now - please report back if you have more actionable details.

fwiw i see the same behavior - not sure exactly where to start with this since the error doesn't give any context.

File a bug report with uglifyjs-webpack-plugin to print out the uglify minify() error.

This is a problem that happens when parallel: true is enabled, because the Error object is lost when it is sent across Worker boundaries. Use parallel: false to see the actual error, which is:

ERROR in bundle.a32a8a2e8d54ecb71de3.js from UglifyJs
RangeError: Maximum call stack size exceeded
    at new AST_SymbolRef (eval at DEFNODE (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1)), <anonymous>:2:30)
    at AST_SymbolRef._clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:462:16)
    at AST_SymbolRef.clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:465:21)
    at AST_SymbolRef._clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:455:29)
    at AST_SymbolRef.clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:465:21)
    at TreeTransformer.eval [as before] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:458:33)
    at AST_SymbolRef.eval [as transform] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4558:35)
    at eval (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4678:43)
    at AST_Call.eval [as transform] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4562:21)
    at AST_Call._clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:456:25)
    at AST_Call.clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:465:21)
    at TreeTransformer.eval [as before] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:458:33)
    at AST_Call.eval [as transform] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4558:35)
    at eval (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4589:31)
    at AST_SimpleStatement.eval [as transform] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4562:21)
    at AST_SimpleStatement._clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:456:25)
    at AST_SimpleStatement.clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:465:21)
    at TreeTransformer.eval [as before] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:458:33)
    at AST_SimpleStatement.eval [as transform] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4558:35)
    at eval (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4577:25)
    at doit (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:134:23)
    at MAP (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:160:52)
    at do_list (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4576:16)
    at eval (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4673:25)
    at AST_Function.eval [as transform] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4562:21)
    at AST_Function._clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:456:25)
    at AST_Function.clone (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:465:21)
    at TreeTransformer.eval [as before] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:458:33)
    at AST_Function.eval [as transform] (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4558:35)
    at eval (eval at <anonymous> (.../node_modules/uglify-es/tools/node.js:21:1), <anonymous>:4687:43)

@Kovensky Unfortunately the stack trace is not helpful without the JS input and uglify options. Could you please file a new bug report and fill out the issue template?

I'm not sure I'll be able to provide the input, or even useful input (the bundle that is crashing is enormous and all of it is work-related proprietary code...); but these are the uglifyOptions:

uglifyOptions: ({
  ecma: 5,
  compress: {
    unsafe_math: true,
    unsafe_proto: true,
    unsafe_regexp: true
  },
  warnings: false
})

I'll see if disabling the unsafe stuff helps and open a bug report if I learn anything; but it might be better for someone else to provide the details if possible.

There may be an infinite deep AST clone going on in https://github.com/mishoo/UglifyJS2/issues/2438#issuecomment-342058935 but without the input source involved we don't know how it comes about.

It's not difficult to make a reduced test case from large sources. Just disable minify in webpack to produce an uncompressed file. Run that file through the CLI with uglifyjs -b to remove the comments and beautify it. Then repeatedly comment out large sections of code and run the file through uglifyjs -c until you have a small test case exhibiting the error.

isolated the bug - see #2442

Was this page helpful?
0 / 5 - 0 ratings