Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
vite-plugin-electron-renderer
Advanced tools
Support use Node.js API in Electron-Renderer
English | 简体中文
In short, vite-plugin-electron-renderer
is responsible for polyfilling Electron, Node.js built-in modules.
npm i vite-plugin-electron-renderer -D
import renderer from 'vite-plugin-electron-renderer'
export default {
plugins: [
renderer(),
],
}
C/C++
, esm
package in the Renderer process.import renderer from 'vite-plugin-electron-renderer'
export default {
plugins: [
renderer({
resolve: {
// C/C++ modules must be pre-bundle
serialport: { type: 'cjs' },
// `esm` modules only if Vite does not pre-bundle them correctly
got: { type: 'esm' },
},
}),
],
}
By the way, if a module is marked as
type: 'cjs'
, the plugin just loads it in usingrequire()
. So it should be put intodependencies
.
renderer(options: RendererOptions)
export interface RendererOptions {
/**
* Explicitly tell Vite how to load modules, which is very useful for C/C++ and `esm` modules
*
* - `type.cjs` just wraps esm-interop
* - `type.esm` pre-bundle to `cjs` and wraps esm-interop
*
* @experimental
*/
resolve?: {
[module: string]: {
type: 'cjs' | 'esm',
/** Full custom how to pre-bundle */
build?: (args: {
cjs: (module: string) => Promise<string>,
esm: (module: string, buildOptions?: import('esbuild').BuildOptions) => Promise<string>,
}) => Promise<string>
}
}
}
Load Electron and Node.js cjs-packages/built-in-modules (Schematic)
┏————————————————————————————————————————┓ ┏—————————————————┓
│ import { ipcRenderer } from 'electron' │ │ Vite dev server │
┗————————————————————————————————————————┛ ┗—————————————————┛
│ │
│ 1. Pre-Bundling electron module into │
│ node_modules/.vite-electron-renderer/electron │
│ │
│ 2. HTTP(Request): electron module │
│ ————————————————————————————————————————————————> │
│ │
│ 3. Alias redirects to │
│ node_modules/.vite-electron-renderer/electron │
│ ↓ │
│ const { ipcRenderer } = require('electron') │
│ export { ipcRenderer } │
│ │
│ 4. HTTP(Response): electron module │
│ <———————————————————————————————————————————————— │
│ │
┏————————————————————————————————————————┓ ┏—————————————————┓
│ import { ipcRenderer } from 'electron' │ │ Vite dev server │
┗————————————————————————————————————————┛ ┗—————————————————┛
In general. Vite will pre-bundle all third-party modules in a Web-based usage format, but it can not adapt to Electron Renderer process especially C/C++ modules. So we must be make a little changes for this.
// 👉 https://github.com/electron-vite/vite-plugin-electron-renderer/blob/v0.13.0/src/optimizer.ts#L139-L142
const _M_ = require("serialport");
export default (_M_.default || _M_);
export const SerialPort = _M_.SerialPort;
// export other members ...
Classify | e.g. | dependencies | devDependencies |
---|---|---|---|
Node.js C/C++ native modules | serialport, sqlite3 | ✅ | ❌ |
Node.js CJS packages | electron-store | ✅ | ✅ |
Node.js ESM packages | execa, got, node-fetch | ✅ | ✅ (Recommend) |
Web packages | Vue, React | ✅ | ✅ (Recommend) |
devDependencies
?Doing so will reduce the size of the packaged APP by electron-builder.
0.14.6 (2024-09-20)
FAQs
Support use Node.js API in Electron-Renderer
We found that vite-plugin-electron-renderer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.