puppeteer-ipc
Lightweight wrapper for mutual communication on Puppeteer, inspired by Electron.
Install
npm i puppeteer puppeteer-ipc
Usage
;; const browser = await puppeteer;const page = await browser;await page; const ipc = page;await ipcstart; // ----- Browser side -----await page; // ----- Node.js side -----ipc;await ipc; // Output: Message from the browser: hello
How It Works
puppeteer-ipc
uses APIs below to make mutual communication possible:
page.evaluate
to send data to the browser from Node.js processpage.exposeFunction
to send data to Node.js from the browser process
API
IPC
(puppeteer-ipc/main
)
- page
Page
Puppeteer's page instance - options.distPath
string
Path for JS file ofpuppeteer-ipc/browser
- options.skipBrowserInitialization
boolean
Whether or not to skip initialization such as loading JS file on browser.
This is a class that controls IPC on Node.js side. Since this class extends EventEmitter
, you can also use inherited methods such as on
, off
and once
.
start
- returns:
Promise<void>
Nothing
Exposes Node.js gateway methods to the browser and wait for them to be loaded.
send
name
string
Name of the event...payloads
unknown[]
Payloads of the event which will be passed to the callback function. These values must be serializable to JSON- returns:
Promise<void>
Nothing
A method that sends an event to the browser from Node.js.
IPC
(puppeteer-ipc/browser
)
This is a class that controls IPC on the browser side.
IPC.send
A method that sends an event to Node.js from the browser. Behaves exactly the same as puppeteer-ipc/main
's send
method.
TypeScript
puppeteer-ipc
is written in TypeScript and fully supports its major features.
Event Callbacks
You can pass a map of event name and its arguments to IPC as a generic parameter to annotate parameters:
; ipc.on"my_event",;
Typing Module on Browser
If you use JS bundler for browsers such as webpack, then you can use import statement and consume the type information.
// Browser side;
Note that in this case, you can pass option skipBrowserInitialization: true
to avoid creating IPC instance twice:
// Node.js side;
Related Projects
- Electron ─ A desktop app framework which also uses IPC technique to communicate mutually between Node.js and Chromium process.
- electron-better-ipc ─ Electron IPC wrapper for synchronous communication.
License
MIT