socekt.io-clientのEIO=3版をブラウザでES moduleとして読み込む備忘録

socekt.io-clientのEIO=3版(enginel.ioプロトコルバージョン3)をブラウザでES moduleとして読み込みたかったが、なかなか苦労したので対応した備忘録。
socekt.io-clientのプロトコルはサーバー側のsocket.ioとバージョンが同じでなければならない。
現在(2021/3/6)の最新版はEIO=4だが、主流はいまだEIO=3のようだ。
ドキュメントが見つけられなかったが、おそらくsocekt.io-clientとしては2.xまではEIO=3で3.xからEIO=4となっている。
公式ブログによると2.3.1が2.x系の最終版だろうか。
githubには2.4.xのブランチもあるがreleasesには2.4は記載されていない。
なので2.3.1を使用する。

buid

結論としては2.3.1版のES moduleビルドは苦労のわりに得られるものが少ないのであきらめたので途中まで。
gulpがversion 3という古いバージョンなのでnodeのバージョンを下げる必要がありv10.10.0を使用した。

git clone -b 2.3.x https://github.com/socketio/socket.io-client
cd socket.io-client
npm install
make build

makeを使ってbuildする。内部はgulpを使用している。これで通常版はビルドに成功した。
次にES module版だが、通常はsupport/webpack.config.jsの

libraryTarget: 'umd',

libraryTarget: 'module',

に変更すればよいが、webpackのバージョンが低く、ES moduleに対応していない。
webpackのバージョンを上げても良いが、config.jsの内容を見直す必要があり、今後2.3.xは使用されなくなると考えると
そこまで手間をかけるのは割に合わない。なのでbuildされたdistのファイルを直接編集することとした。

distファイルの編集

socket.io.dev.jsがminifyされていないjsファイルでありこれを使用する。
同じようなことをしようとしている人がstackoverflowにいたため、参考になった。
Use socket.io in browser via ES6 import
socket.io.dev.jsの前に

const exports = null, module = {};

を。後に

export default module.exports;

を追加する。
これでhtmlファイルから

  <script type="module" src="./socket.io.dev.js"></script>
  <script type="module">
    import  io  from "./socket.io.dev.js";
  </script>

などとして使用可能になった。

参考サイト

https://stackoverflow.com/questions/64405808/use-socket-io-in-browser-via-es6-import

シェアする

  • このエントリーをはてなブックマークに追加

フォローする