为什么捐赠
API 资源管理器
升级指南
新增!
quasar.config 文件
将项目转换为使用 Vite 的 CLI
浏览器兼容性
支持 TypeScript
目录结构
命令列表
CSS 预处理器
路由
懒加载 - 代码分割
处理资源
启动文件
预取功能
API 代理
处理 Vite
处理 process.env
使用 Pinia 进行状态管理
使用 Vuex 进行状态管理
代码检查
测试与审计
开发移动应用
Ajax 请求
将开发服务器开放到公网
使用 Vite 的 Quasar CLI - @quasar/app-vite
Electron 访问文件

使用 __dirname & __filename

由于主进程使用 Esbuild 打包,因此在生产环境中使用 __dirname__filename 将无法提供预期的值。参考文件树,您会注意到在生产环境中,electron-main.js 和 electron-preload.js 文件位于 dist/electron-* 文件夹内。根据此知识,相应地使用 __dirname & __filename

js/...
icons/
node_modules/
index.html
package.json
electron-main.js
electron-preload.js
... /public 文件夹的内容

读取和写入本地文件

使用 Electron 的一大优势是可以访问用户的文件系统。这使您能够读取和写入本地系统上的文件。为了帮助避免 Chromium 的限制并写入应用程序的内部文件,请务必使用 Electron 的 API,特别是 app.getPath(name) 函数。此辅助方法可以为您提供系统目录(例如用户的桌面、系统临时文件等)的文件路径。

我们可以使用 userData 目录,该目录专门为我们的应用程序保留,因此我们可以确信其他程序或其他用户交互不应篡改此文件空间。

准备工作

您需要将 @electron/remote 依赖项安装到您的应用程序中


$ yarn add @electron/remote

然后,在您的 src-electron/electron-main.js 文件中,对以下几行进行一些编辑

/electron-main.js

import { app, BrowserWindow, nativeTheme } from 'electron'
import { initialize, enable } from '@electron/remote/main' // <-- add this
import path from 'path'

initialize() // <-- add this

// ...

mainWindow = new BrowserWindow({
  // ...
  webPreferences: {
    sandbox: false // <-- to be able to import @electron/remote in preload script
    // ...
  }
})

enable(mainWindow.webContents) // <-- add this

mainWindow.loadURL(process.env.APP_URL)

// ...

用法

最后,以下是如何访问文件的示例

/electron-main 或 /electron-preload

import path from 'path'
import { app } from '@electron/remote'

const filePath = path.join(app.getPath('userData'), '/some.file')

如果您在预加载脚本中导入 @electron/remote,请记住您需要在实例化 BrowserWindow 的 electron-main.js 中设置以下内容

/electron-main

mainWindow = new BrowserWindow({
  // ...
  webPreferences: {
    // ...
    sandbox: false // <-- to be able to import @electron/remote in preload script
  }
}

访问公共文件夹

如果出于某种原因,您在 /public 文件夹中存储了一些重要文件,您可以按照以下代码访问它们。要了解为什么需要以这种方式访问它们,请阅读上面“使用 __dirname & __filename”部分。

/electron-main 或 /electron-preload

import path from 'path'

const publicFolder = path.resolve(__dirname, process.env.QUASAR_PUBLIC_FOLDER)