webpack-common-shake
webpack-common-shake copied to clipboard
Uncaught TypeError when using this plugin
I'm working on a starter for React + ReasonML + webpack. I wanted to use webpack-common-shake plugin. Unfortunately, when enabled, I get this TypeError:
Uncaught TypeError: this.number is not a function
How to reproduce?
- Get demo code:
-
- Clone this repository at https://github.com/mmiszy/reason-react-simple-starter/tree/35f39444691be2394854774a7f68c04484eb2d6b
-
- Or download: https://github.com/mmiszy/reason-react-simple-starter/archive/35f39444691be2394854774a7f68c04484eb2d6b.zip
-
npm install
-
npm start
- open http://localhost:8081/
Expected result:
You can see Hello world, Anne!
in the browser. No errors in the console
Current result:
Uncaught TypeError: this.number is not a function
at Object.numberString (main.js:4385)
at new SockJS (main.js:64)
at socket (socket.js:7)
at Object.<anonymous> (main.js:10282)
at Object.<anonymous> (main.js:10307)
at __webpack_require__ (bootstrap b5203ed…:669)
at fn (bootstrap b5203ed…:87)
at Object.<anonymous> (main.js:17077)
at __webpack_require__ (bootstrap b5203ed…:669)
at validateFormat (bootstrap b5203ed…:715)
Workaround:
Disable webpack-common-shake
plugin in webpack.config.js
I have same issue, and figured out that webpack-common-shake
is doing some transformation on reserved words.
The part of SockJS contains following code:
, number: function(max) {
return Math.floor(Math.random() * max);
}
, numberString: function(max) {
var t = ('' + (max - 1)).length;
var p = new Array(t + 1).join('0');
return (p + this.number(max)).slice(-t);
}
After the common-shake plugin above code is transformed as:
, "number": ((function(max) {
return Math.floor(Math.random() * max);
}),null)
which this.number
ended up being null
, instead of function.
👍 That's exactly the same problem I have. It seems that the comma operator shouldn't be here.
Hello!
I'll take a look at it later this week. It has nothing to do with reserved words, however, as number
is not one of them.
The way it adds comma and null
is a normal mode of operation. This function is unused in this library, so it isolates it for later removal by UglifyJS.
Will see what's the underlying problem a bit later.
Thanks for reporting!
Hello @indutny thanks for all the work you have done so far! It definitely helped me a lot!
But starting from today, i started to encounter this issue as well. Do you have any updates regarding this problem?
Having same issue when trying to use createVerify reexported from browserify-sign by browserify-crypto