#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)
.