From e0b33df3366468fbec40f99ec9bbb80850f76ee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E9=9E=8B=E6=B2=A1=E5=8F=B7?= <308487730@qq.com> Date: Sat, 25 Jun 2022 10:47:53 +0800 Subject: [PATCH] feat: `useNodeJsInElectronRenderer()` --- vite.config.electron.ts | 38 ++++++++++++++++++++++++++++++++++++++ vite.config.ts | 3 ++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/vite.config.electron.ts b/vite.config.electron.ts index 3980984..81c195b 100644 --- a/vite.config.electron.ts +++ b/vite.config.electron.ts @@ -1,6 +1,7 @@ import { join } from 'path' import { builtinModules } from 'module' import { defineConfig } from 'vite-plugin-electron' +import resolve, { lib2esm } from 'vite-plugin-resolve' import pkg from './package.json' const external = [ @@ -41,3 +42,40 @@ export default defineConfig({ } }, }) + +export function useNodeJsInElectronRenderer() { + return resolve( + /** + * Here you can specify other modules + * 🚧 You have to make sure that your module is in `dependencies` and not in the` devDependencies`, + * which will ensure that the electron-builder can package it correctly + */ + { + // If you use the following modules, the following configuration will work + // What they have in common is that they will return - ESM format code snippets + + // ESM format string + 'electron-store': 'export default require("electron-store");', + // Use lib2esm() to easy to convert ESM + // Equivalent to + /** + * sqlite3: () => ` + * const _M_ = require('sqlite3'); + * const _D_ = _M_.default || _M_; + * export { _D_ as default } + * ` + */ + sqlite3: lib2esm('sqlite3', { format: 'cjs' }), + serialport: lib2esm( + // CJS lib name + 'serialport', + // export memebers + [ + 'SerialPort', + 'SerialPortMock', + ], + { format: 'cjs' }, + ), + } + ) +} diff --git a/vite.config.ts b/vite.config.ts index ca6d677..fb103c2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,7 +3,7 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import electron from 'vite-plugin-electron' import renderer from 'vite-plugin-electron/renderer' -import electronConfig from './vite.config.electron' +import electronConfig, { useNodeJsInElectronRenderer } from './vite.config.electron' rmSync('dist', { recursive: true, force: true }) // v14.14.0 @@ -14,5 +14,6 @@ export default defineConfig({ electron(electronConfig), // Enable use Electron, Node.js API in Renderer-process renderer(), + useNodeJsInElectronRenderer(), ], })