webpack-common-shake icon indicating copy to clipboard operation
webpack-common-shake copied to clipboard

Uncaught TypeError when using this plugin

Open typeofweb opened this issue 7 years ago • 5 comments

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

typeofweb avatar Aug 02 '17 11:08 typeofweb

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.

netil avatar Aug 03 '17 09:08 netil

👍 That's exactly the same problem I have. It seems that the comma operator shouldn't be here.

typeofweb avatar Aug 03 '17 11:08 typeofweb

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!

indutny avatar Aug 08 '17 15:08 indutny

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?

usirin avatar Oct 18 '17 12:10 usirin

Having same issue when trying to use createVerify reexported from browserify-sign by browserify-crypto image

CertainLach avatar Dec 31 '18 14:12 CertainLach