「socekt.io-clientのEIO=3版をブラウザでES moduleとして読み込む備忘録」の後にES module化に成功したので備忘録。
webpackでcommonjs出力して、rollupでES化した。
node.jsはv10.10.0を使用した。
git clone -b 2.3.x https://github.com/socketio/socket.io-client cd socket.io-client npm install npm install --save-dev rollup rollup-plugin-terser
support/webpack.config.dev.jsを編集
libraryTarget: 'umd',
を
libraryTarget: 'commonjs',
へ修正。
rollup.config.jsを作成
import commonjs from '@rollup/plugin-commonjs'; import {terser} from 'rollup-plugin-terser'; export default { input: 'dist/socket.io.dev.js', output: { file: 'dist/socket.io.es.min.js', format: 'es', }, plugins: [commonjs(), terser()] };
Makefileを修正。buildに以下を追加する。
npx rollup -c
ビルドするとdist/socket.io.es.min.jsが生成する。
make build
これでhtmlファイルから
<script type="module" src="./socket.io.es.min.js"></script> <script type="module"> import socketIoClient from "./socket.io.es.min.js"; const socket = socketIoClient.io("ws://example.com"); </script>
などとして使用可能になった。
追記
wrapper.mjsを以下の内容で追加。
import socketIoClient from "./dist/socket.io.es.tmp.js"; export const io = socketIoClient.io; export default io;
rollup.config.jsを以下のように編集する。
import commonjs from '@rollup/plugin-commonjs'; import {terser} from 'rollup-plugin-terser'; export default [{ input: 'dist/socket.io.dev.js', output: { file: 'dist/socket.io.es.tmp.js', format: 'es', }, plugins: [commonjs()] },{ input: 'wrapper.mjs', output: { file: 'dist/socket.io.es.min.js', format: 'es', }, plugins: [terser()] }];
ビルドしてdist/socket.io.es.min.jsを作成する。
make build
これでhtmlファイルから
<script type="module" src="./socket.io.es.min.js"></script> <script type="module"> import io from "./socket.io.es.min.js"; const socket = io("ws://example.com"); </script>
などとして使用可能になった。