I am trying to use socket.io-client
in my React app and am running into an odd problem. Deep inside engine.io
(required by socket.io-client
) there is a file called websocket.js with the following bit of code:
if (typeof window === 'undefined') {
try {
NodeWebSocket = require('ws');
} catch (e) { }
}
Since window
is not undefined, you might think that this code does nothing, but you’d be wrong.
My packager (the standard React Native packager, so far as I know) goes through all the Javascript files and looks for all the import
and require
commands, and packages up the files they refer to.
The ws
module contains a file called WebSocket.js
, which intended for Node.js and makes use of Node.js modules like url.js
and http.js
, which of course do not exist in React, so the attempt at packaging fails.
Deleting those five lines fixed the problem and everything worked, but there must be a better way. Can I tell the packager to exclude certain modules?