如何将环境变量设置到可执行的 Electron Forge 构建中?

问题描述 投票:0回答:1

我正在使用 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 应用程序的最终可执行文件的正确方法是什么?任何帮助,将不胜感激。谢谢!

javascript node.js electron dotenv electron-forge
1个回答
0
投票

这揭示了解决方案: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;

此处的路径可能很大程度上取决于您的设置。这就是我的样子。

© www.soinside.com 2019 - 2024. All rights reserved.