Vue3 + Electron框架读取程序外部配置文件

网上找了一堆都不行,根据这个步骤来肯定能用

1. 在项目下新建一个config.json文件

9ab703d22698568a7697fec0c5e3880c.png

2. json文件中写入一些配置

3e2e587279f13002d8aff2683ff56574.png

3. vue.config.js中配置打包时把config.json文件copy到应用目录下

  pluginOptions:{
    electronBuilder:{
      nodeIntegration:true,
      builderOptions: {
        extraResources: [
          { "from": "./config.json", "to": "../" }
        ],
        nsis: {
          allowToChangeInstallationDirectory: true,
          oneClick: false,
          installerIcon: "./public/safeicon.ico", //安装logo
          installerHeaderIcon: "./public/safeicon.ico" //安装logo
        },
        win: {
          icon: './public/safeicon.ico' //打包windows版本的logo
        },
        productName: "APP", //应用的名称
      }
    }
  }

4. 修改 electorn 的入口文件 background.js 配置

  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    title: 'APPName',
    webPreferences: {
      nodeIntegration: true,  // 允许html页面上的javascipt代码访问nodejs 环境api代码的能力
      enableRemoteModule: true, // 是否允许使用remote
      contextIsolation: false,
      // 加载本地图片
      webSecurity: false, // 允许跨域
      webviewTag: true // 允许webview
    },
    icon: "app://./safeicon.ico",
    show: false,
    autoHideMenuBar: true, // 隐藏顶部工具栏,生产环境时设置为true
    frame: false // 无边框
  })

主要是开启这两个配置

      nodeIntegration: true,  // 允许html页面上的javascipt代码访问nodejs 环境api代码的能力
      enableRemoteModule: true, // 是否允许使用remote

5.  新增工具类 src\utils\getConfig.js

const path = window.require && window.require("path");
const fs = window.require && window.require("fs");
const electron = window.require && window.require('electron')

export function getSystem() {
  //这是mac系统
  if (process.platform == "darwin") {
    return 1;
  }
  //这是windows系统
  if (process.platform == "win32") {
    return 2;
  }
  //这是linux系统
  if (process.platform == "linux") {
    return 3;
  }
}
/**
 *
 * @returns 获取安装路径
 */
export function getExePath() {
  // return path.dirname("C:");
  return path.dirname(electron.remote.app.getPath("exe"));
}
/**
 *
 * @returns 获取配置文件路径
 */
export function getConfigPath() {
  if (getSystem() === 1) {
    return getExePath() + "/config.json";
  } else {
    return getExePath() + "\\config.json";
  }
}
/**
 * 读取配置文件
 */
export function readConfig() {
  return new Promise((res, rej) => {
    console.log("fs", fs)
    fs.readFile(getConfigPath(), "utf-8", (err, data) => {
      let config = ""
      if (data) {
        //有值
        config = JSON.parse(data)
      }
      res(config)
    })
  })
}

6. 使用读取配置

import { readConfig } from '@/utils/getConfig.js'

if (process.env.NODE_ENV !== "development") {
  (async function () {
    const res = await readConfig()
    console.log(res);
    axios.defaults.baseURL = "http://"+res.ip+":"+res.port;
  })()
} else {
  axios.defaults.baseURL = "/api";
}

我此处是判断是否是开发环境,不是开发环境下就去读取 config.json 的配置。你们根据实际情况调整。

ctrl + shift + i 开启控制台查看配置已生效

37ff0729b73d0c68a69d9aa9d3412e62.png

### Electron 中样式的设置与使用 在 Electron 应用程序开发过程中,样式管理是一个重要的环节。以下是关于如何在 Electron 中应用 CSS 样式的方法: #### 1. 基础样式加载 Electron 支持标准的 HTML 和 CSS 文件引入方式。可以通过 `<link>` 标签或者 `@import` 方法来加载外部样式文件[^2]。 ```html <link rel="stylesheet" href="./styles/main.css"> ``` 如果发现样式未正常加载,可能是因为路径配置错误或渲染进程未能正确解析资源位置。此时应确认文件路径是否相对于入口 HTML 正确指定,并确保打包工具(如 Webpack 或 Vite)已正确定义静态资源处理逻辑[^4]。 #### 2. 自定义窗口拖拽区域 对于需要支持拖动功能的应用场景,可通过 `-webkit-app-region: drag;` 设置特定 DOM 区域作为可拖拽部分[^1]。需要注意的是,设置了该属性的元素无法响应鼠标事件;因此,在实际项目中通常会结合其他技术手段调整交互体验。 例如: ```css .drag-area { -webkit-app-region: drag; } ``` #### 3. 动态计算样式值 当遇到某些情况下需动态读取当前节点的实际显示效果时,可以利用 JavaScript 提供的相关 API 完成操作。比如通过 `window.getComputedStyle()` 获取最终生效的样式规则[^3]。 示例代码如下所示: ```javascript const element = document.querySelector(&#39;.example&#39;); const style = window.getComputedStyle(element); console.log(style.color); // 输出颜色信息 ``` #### 4. 隐藏无用界面组件 为了避免因直接采用 `display: none;` 导致潜在兼容性问题或其他副作用发生,则推荐改用更灵活的方式控制可见状态——即缩小尺寸至零像素大小而不影响文档流布局结构。 实例演示: ```css .hidden-element { width: 0 !important; height: 0 !important; overflow: hidden; visibility: collapse; } ``` #### 5. Vue框架集成注意事项 针对基于Vue构建的Electron工程而言,务必注意区分环境变量的作用范围以免造成不必要的混乱现象出现。特别是在初始化阶段调用了插件注册函数之前先判断运行上下文属于Node.js还是浏览器端再决定是否执行相应动作显得尤为重要[^5]。 ```javascript if (!process.env.IS_WEB) { require(&#39;@electron/remote/main&#39;).initialize(); } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚哒老虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值