背景
ところが、レンダープロセスで、requireして自作のnpmモジュールが読み込めない。
socket.ioはfile://だと上手くいかない
通常のElectronではメインプロセスが話のコードで
mainWindow.loadUrl('file://'+__dirname+'/index.html');
という具合に、file://でレンダープロセスのlocation.hrefを指定する。
ところが、socket.ioだと、この指定だと、動かない。真面目に、コード読んでないが、
おそらくsocket.ioのクライアントが話のコードでlocation.hrefに依存した処理がある模様。これがfile://だとダメで、httpもしくは、httpsを指定する必要がある。
ということで、socket.ioを使う場合、以下の様になる。
mainWindow.loadUrl('http://127.0.0.1:3000');
レンダープロセスではfile://
ところが、レンダープロセスではhttp://やhttps://では、
requireで任意のモジュールが呼び出せない。
not foundとエラーとなってしまう。
対策
メインプロセス側
メインプロセス側で__dirnameにpackage.jsonのmainに指定したjsへのパスが格納されている様なので、これをレンダープロセス側に渡す。
mainWindow.loadUrl('http://127.0.0.1:3000/s?d='+__dirname);
レンダープロセス側
module.paths.push(location.search.slice(3)+'/node_modules');
const localip = require('node-ore-module');