-
Notifications
You must be signed in to change notification settings - Fork 569
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
请教一下vite-renderer.config中的resolveElectron函数 #52
Comments
一些前奏解释一、 首先这个项目的本意不希望用户在 Renderer-process 中使用 Electron、NodeJs API 二、 resolveElectron 插件设计目的是为了一些仍然希望在 Renderer-process 中使用 Electron、NodeJs API 的用户 三、 为此为了解决上述的潜在问题,我设计了 经典报错: __dirname is not defined一切要从 ESModule 开始 👉 NodeJs 在 ESModule 下 No __filename or __dirname vite 在开发时期强依赖 ESModule 打包时期默认也是 ESModule 众所周知 👉 electron 共有三种环境/三种状态即: NodeJs、Electron-Main、Electron-Renderer 使用 vite 启动 electron 时候,为 NodeJs 运行环境,node_modules/electron 包导出的只是一个 electron.exe 的文件路径
const fs = require('fs');
const path = require('path');
// 🐞 🐞 🐞 🐞 __dirname is not defined 报错就会出现在下面这行 🐛 🐛 🐛 🐛
const pathFile = path.join(__dirname, 'path.txt');
function getElectronPath () {
let executablePath;
if (fs.existsSync(pathFile)) {
executablePath = fs.readFileSync(pathFile, 'utf-8');
}
if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
return path.join(process.env.ELECTRON_OVERRIDE_DIST_PATH, executablePath || 'electron');
}
if (executablePath) {
return path.join(__dirname, 'dist', executablePath);
} else {
throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again');
}
}
module.exports = getElectronPath(); Renderer-process 中正确加载 Electron、NodeJs API一、 设想下如果我们避开 vite 的默认行为,Renderer-process 中的 二、 vite 最重要的概念
import -- Electron、NodeJS API 设计一、 在 vite 中通过配置
/**
* 🚧 下面的代码会被 vite 抛到 Renderer-process 中运行
*/
const electron = require("electron");
const {
clipboard,
nativeImage,
shell,
contextBridge,
crashReporter,
ipcRenderer,
webFrame,
desktopCapturer,
deprecate,
} = electron;
export {
electron as default,
clipboard,
nativeImage,
shell,
contextBridge,
crashReporter,
ipcRenderer,
webFrame,
desktopCapturer,
deprecate,
}
config.resolve.alias = {
electron: '项目目录/node_modules/.自定义文件夹/electron.js',
}
🚧 实际中 “alias 配置,缓存文件生成” 这两件事儿交给 vite-plugin-resolve 去做! 二、 同理可证 NodeJs 模块也可以像 Electron 那样设计 就不一一列出了。。。 三、
config.optimizeDeps.exclude = [
'electron',
'fs',
'path',
...其他 NodeJs 内置模块
]; |
感谢解答! |
@caoxiemeihao I think this documentation is really helpful. If you don't mind, can you add an |
@K3NZ11 Thanks for your feedback, I'll trying to do it, but my english is poor. 😅 |
文档已发布在 知乎专栏 :) |
resolveElectron似乎在plugins中删掉也是可以正常调试和打包的。
想请教一下这个函数的意图和作用。
最近在学习electron相关技术,该项目让我受益匪浅,感谢作者
The text was updated successfully, but these errors were encountered: