首页 > 解决方案 > 如何在编译时设置电子变量?

问题描述

我正在使用 electron-builder 打包一个 React 应用程序。我的应用程序使用 create-react-app 样板。

有没有办法可以在编译时设置一个变量,以便它可以在运行时在主进程的代码中的条件中使用......?

我正在寻找与 C 的预处理器宏等效的东西。所以我可以做类似的事情:

electron-builder --extraConfig BUILD_TYPE=testing

然后在我的 main.js 中:

if (extraConfig.BUILD_TYPE === 'testing') { // do stuff }

标签: webpackelectroncreate-react-appelectron-builder

解决方案


我将electron-builder命令放在 NPM 脚本中,然后预先运行另一个脚本以设置BUILD_TYPE.txt文件中。

像这样:

package.json

"scripts": {
    "distProd": "node ./setBuildType.js prod && electron-builder",
    "distDev": "node ./setBuildType.js dev && electron-builder",
}

然后在里面setBuildType.js

// process.argv[2] Contains the type.
fs.writeFile('./BUILD_TYPE.txt', process.argv[2], function (errObj) {
    if (errObj) {
        console.log(errObj);
    }
});

然后从您的应用程序中获取BUILD_TYPE

// Always set `BUILD_TYPE` to `dev` when running from the terminal.
if (!app.isPackaged) {
    var BUILD_TYPE = fs.readFileSync('./BUILD_TYPE.txt');
} else {
    var BUILD_TYPE = 'dev';
}
console.log(BUILD_TYPE); // Outputs "prod" or "dev".

这将检查它是从安装程序还是从终端运行,如果它是从终端运行,那么它将始终设置BUILD_TYPEdev.


推荐阅读