我正在使用 Electron Forge 构建一个 Electron 应用程序,我需要将环境变量传递给最终的可执行文件。
我尝试在
forge.config.js
中定义环境变量,如下所示:
env: {
DB_PATH_RELATIVE: process.env.DB_PATH_RELATIVE,
DB_CURRENT_VERSION: process.env.DB_CURRENT_VERSION
}
但是环境变量似乎没有传递给最终的可执行文件。我还尝试使用
cross-env
中的 start
和 make
中的 package.json
脚本设置环境变量,但这似乎也不起作用,只是可以从forge.config.js
似乎只能在该文件中访问,并且不会传递到最终的可执行文件。
将环境变量传递到 Electron Forge 应用程序的最终可执行文件的正确方法是什么?任何帮助,将不胜感激。谢谢!
这揭示了解决方案:https://github.com/electron/forge/issues/442#issuecomment-368736955
在package.json中:
"scripts": {
"make": "APP_ENV=staging electron-forge make",
// other
},
由于我在 forge 配置中使用了 asar=true,因此我需要添加 json 文件作为额外资源,从而产生以下配置:
// forge.config.ts
module.exports = {
packagerConfig: {
asar: true,
extraResource: [path.resolve(__dirname, "./env.json")],
// other options
},
hooks: {
generateAssets: async () => {
fs.writeFileSync(
'./env.json',
JSON.stringify({
role: process.env.MY_APP_ROLE // here the env variable is saved to file
})
);
}
}
}
然后在代码中,例如
main.ts
:
const pathToJson = path.join(__dirname, "..", "..", "..", "./env.json");
const data = fs.readFileSync(pathToJson, "utf8");
const APP_ENV = JSON.parse(data).APP_ENV;
此处的路径可能很大程度上取决于您的设置。这就是我的样子。