webpack - 如何在编译时设置电子变量?
问题描述
我正在使用 electron-builder 打包一个 React 应用程序。我的应用程序使用 create-react-app 样板。
有没有办法可以在编译时设置一个变量,以便它可以在运行时在主进程的代码中的条件中使用......?
我正在寻找与 C 的预处理器宏等效的东西。所以我可以做类似的事情:
electron-builder --extraConfig BUILD_TYPE=testing
然后在我的 main.js 中:
if (extraConfig.BUILD_TYPE === 'testing') { // do stuff }
解决方案
我将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_TYPE
为dev
.
推荐阅读
- visual-studio - Visual Studio VSIX 扩展未显示在“工具”菜单中
- javascript - html画布返回不正确的imageData()
- python - 在 vega-lite 中是否可以绘制山脊线图?
- testng - RestAssured - TestNG 测试 RestfulAPI 引发连接超时错误
- javascript - 在 javascript 中使用函数的最佳实践是什么
- asp.net - DevExpress Legacy ASPxGridView:如何让列标题复选框全部选中或全部清除;也有个别行 CheckBoxes 影响标题 CheckBox?
- iis - 如何修复在 vps windows server 2019 上没有 www 时无法加载的网站
- python - 如何查询一对多相关对象的字段?
- android - 冲突的版本
- python-3.x - Python:找到一列的最大值并在同一行中提取其他列的值