You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron应用启动时如何将环境变量值从主进程传递到渲染线程

渲染端接收环境变量的实现方案

1. 修正主进程消息发送逻辑

你现有代码存在消息发送时机过早的问题:调用win.webContents.send时页面还未完成加载,渲染进程的事件监听器还未挂载,大概率会丢失消息。同时需要新增预加载脚本配置,用于实现主进程和渲染进程的安全通信,修改后的main.js代码如下:

const { app, BrowserWindow } = require('electron')
const path = require('path')

const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            // 配置预加载脚本的绝对路径
            preload: path.join(__dirname, 'preload.js')
        }
    });
  
    win.loadFile('index.html');

    // 读取环境变量
    const variableValue = process.env.MY_ENVIRONMENT_VARIABLE;
    console.log(`Variable value: ${variableValue}`);

    // 等待页面加载完成后再发送消息,确保监听器已就绪
    win.webContents.on('did-finish-load', () => {
        win.webContents.send('initialize', { variableName: variableValue });
    })
}

app.whenReady().then(createWindow)
// 其余应用生命周期逻辑保持不变即可

2. 编写预加载脚本preload.js

Electron默认开启上下文隔离,渲染进程无法直接调用IPC接口,需要通过预加载脚本向渲染层暴露安全的通信能力,在项目根目录新建preload.js,代码如下:

const { contextBridge, ipcRenderer } = require('electron')

// 向渲染进程的window对象挂载自定义API
contextBridge.exposeInMainWorld('electronAPI', {
    // 注册监听初始化事件的方法
    onInitialize: (callback) => {
        ipcRenderer.on('initialize', (_event, envData) => callback(envData))
    }
})

3. 渲染端获取环境变量

你可以直接在index.html的脚本标签,或者单独引入的渲染进程JS文件中,调用预加载暴露的接口获取变量:

// 监听主进程发送的初始化事件,拿到环境变量
window.electronAPI.onInitialize((envData) => {
    const myEnv = envData.variableName
    // 此处可直接使用拿到的环境变量执行业务逻辑
    console.log('获取到的环境变量值为:', myEnv)
})

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:06:02