TypeError: Super expression must either be null or a function, not undefined
tejasbubane opened this issue ยท 9 comments
I am getting this error after upgrading to webpack v4. Strangely this happens only in the prod build and not in dev build.
This is the stack-trace in browser console:
TypeError: Super expression must either be null or a function, not undefined
bundle-f82b2570e6fa0145fdb8.js:22:54086
n.withStyles/</n</<
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:22:54086
n.withStyles/</n<
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:22:54066
n.withStyles/<
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:22:53698
<anonymous>
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:36:433740
t
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:1:105
<anonymous>
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:84:260717
t
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:1:105
<anonymous>
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:84:263006
t
http://localhost:8000/js/bundle-f82b2570e6fa0145fdb8.js:1:105
I am actually using react-dates
which is using this library. From stacktrace, I suspect this is where the error is coming from. Also removing react-dates
makes the error to go away.
Here is my entire webpack config: https://gist.github.com/tejasbubane/9ae4d2e099bef97b3b118f99a163294e
Relevant libraries and their versions:
"react": "^15.6.1",
"react-dates": "^15.5.3",
"react-with-styles": "=2.2.0",
"webpack": "^4.12.0",
"babel-core": "^6.26.3",
"babel-loader": "^7.1.4",
"babel-polyfill": "^6.26.0",
Hard to say what might be happening here without more information.
According to this Stack Overflow post, it looks like this might happen if something extends React.component
instead of React.Component
. Do you think anything like that could be happening?
Could you post some of the code from your stack trace?
Thanks for looking into this. I will try and create a standalone app to demonstrate this error.
I'm having this same issue and I found out react-dates
was the culprit. After I disabled it, everything works fine...
Strange thing is it works perfectly on local
system but fails on production
on a live server.
I use SSR with next.js
Something as simple as this
import React, { Component } from 'react'
...
import 'react-dates/initialize';
import 'react-dates/lib/css/_datepicker.css';
import { SingleDatePicker } from 'react-dates';
class Featured extends Component {
}
export default Featured
For my own case, fortunately I found the culprit. UglifyJS was the culprit, Next.js already minifies my code. I had to delete that line
if( process.env.NODE_ENV == 'production') {
config.plugins.push(
new UglifyJSPlugin
)
}
I found the same problem, removing UglifyJS from webpack config fixed it but I thought this is not the best solution.
So I've added ecma
with value 7
to the config of UglifyJS and it magically solved the problem
const uglifyJSMinimizer = new UglifyJSPlugin({
uglifyOptions: {
ecma: 7,
ie8: false,
output: {
comments: false
}
},
cache: true,
parallel: true,
sourceMap: true
})
But I still don't understand how does this option affects the build
For anyone who run into this issue setting keep_fnames: true
for uglifyjs helps.
Maybe because of this mishoo/UglifyJS#3015 (comment)
Try to add exclude: /node_modules/
to .js
files in webpack config
{
test: /\.js|jsx$/,
exclude: /node_modules/
}
This is due to an underlying correctness issue in Terser/Uglify, as per my issue reference.
@marcusdarmstrong thanks! Closing this in favor of that terser/terser#308.