如何为Electron Forge构建的可执行文件设置环境变量?
为Electron Forge应用传递环境变量到最终可执行文件的正确方法
一、打包时注入静态环境变量(推荐用于固定配置)
如果你的环境变量是构建阶段确定的(比如版本号、固定文件路径),可以通过Webpack的DefinePlugin将变量直接嵌入到应用代码中,打包后可执行文件就能直接读取这些值。
操作步骤:
- 确认你的Electron Forge项目使用了Webpack插件(
webpack或webpack-typescript模板默认已集成)。 - 修改
forge.config.js,指定Webpack配置文件路径:
module.exports = { // 其他配置项... plugins: [ { name: '@electron-forge/plugin-webpack', config: { mainConfig: './webpack.main.config.js', renderer: { config: './webpack.renderer.config.js', entryPoints: [{ html: './src/index.html', js: './src/renderer.js', name: 'main_window' }] } } } ] };
- 在主进程配置文件
webpack.main.config.js中添加DefinePlugin:
const { DefinePlugin } = require('webpack'); module.exports = { // 其他主进程配置... plugins: [ new DefinePlugin({ 'process.env.DB_PATH_RELATIVE': JSON.stringify(process.env.DB_PATH_RELATIVE), 'process.env.DB_CURRENT_VERSION': JSON.stringify(process.env.DB_CURRENT_VERSION) }) ] };
- 若需在渲染进程中访问变量,在
webpack.renderer.config.js中添加相同的DefinePlugin配置即可。
构建时Webpack会自动将代码中所有对应process.env变量替换为实际值,打包后的可执行文件无需额外配置就能读取这些变量。
二、运行时动态传递环境变量(用于可变配置)
如果需要在启动可执行文件时动态设置环境变量,主进程可直接读取process.env,但不同系统的设置方式有差异:
Windows(命令提示符):
set DB_PATH_RELATIVE=./data/db.sqlite && your-app.exe
Windows(PowerShell):
$env:DB_PATH_RELATIVE="./data/db.sqlite"; .\your-app.exe
Linux/macOS:
DB_PATH_RELATIVE=./data/db.sqlite ./your-app
注意:渲染进程默认无法直接访问主进程的process.env,需通过IPC通信传递:
- 主进程(main.js):
const { ipcMain } = require('electron'); ipcMain.handle('get-env-variable', (_, key) => { return process.env[key]; });
- 渲染进程(renderer.js):
const { ipcRenderer } = require('electron'); async function getEnvVar(key) { return await ipcRenderer.invoke('get-env-variable', key); } // 使用示例 getEnvVar('DB_PATH_RELATIVE').then(path => console.log(path));
三、常见误区说明
- 你之前在
forge.config.js中设置的env字段,仅用于Electron Forge自身的构建流程,不会传递到应用运行环境。 package.json脚本中用cross-env设置的变量,仅在构建过程中有效(比如forge.config.js能读取),不会被打包到最终可执行文件中。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

