Отправить значение переменной среды в поток рендеринга в приложении Electron

#javascript #electron

#javascript #electron

Вопрос:

У меня есть приложение Electron. Мне нужно получить значение переменной среды с моего локального компьютера для использования в потоке рендеринга. Я хочу передать это значение в поток рендеринга при запуске приложения. Я знаю, что в main.js файле я могу получить переменную среды следующим образом:

main.js

 const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600
    });
  
    win.loadFile('index.html');

    // Retrieve the environment variable value
    const variableValue = process.env.MY_ENVIRONMENT_VARIABLE;
    console.log(`Variable value: ${variableValue}`);

    // Send the variable and it's value to the renderer.
    win.webContents.send('initialize', { 'variableName':variableValue });
}
 

Вышеописанное успешно выводит значение переменной среды в окно терминала. Тем не менее, мне нужно использовать это значение на стороне браузера. Как мне получить значение переменной там?

Спасибо!

Ответ №1:

Это невозможно сделать непосредственно из процесса рендеринга (с nodeIntegration выключенным), поскольку он не имеет прямого доступа к Node.js process переменная.

Самый простой способ сделать это — использовать скрипт предварительной загрузки BrowserWindow, который позволяет вам предоставлять произвольные данные процессу рендеринга через contextBridge API Electron. Пример:

 // Main Process
const win = new BrowserWindow({
  width: 800,
  height: 600,
  preload: path.join(__dirname, 'preload.js'); // require `path` if you haven't already
});
 
 // Preload Script
const { contextBridge } = require('electron');

// this should print out the value of MY_ENVIRONMENT_VARIABLE
console.log(process.env.MY_ENVIRONMENT_VARIABLE);

contextBridge.exposeInMainWorld('envVars', {
  myEnvironmentVariable: process.env.MY_ENVIRONMENT_VARIABLE
});
 
 // Renderer Process
console.log(window.envVars.MY_ENVIRONMENT_VARIABLE)
 

См. Документацию по API contextBridge: https://www.electronjs.org/docs/latest/api/context-bridge

Комментарии:

1. Это должно быть console.log(window.envVars.myEnvironmentVariable) .