Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 如何在编译时设置电子变量?_Webpack_Electron_Create React App_Electron Builder - Fatal编程技术网

Webpack 如何在编译时设置电子变量?

Webpack 如何在编译时设置电子变量?,webpack,electron,create-react-app,electron-builder,Webpack,Electron,Create React App,Electron Builder,我正在使用electron builder打包React应用程序。我的应用程序使用CreateReact应用程序样板 是否有一种方法可以在编译时设置变量,以便在运行时在主进程的代码中的条件中使用它 我正在寻找一个相当于C的预处理器宏。所以我可以这样做: electron builder--extraConfig BUILD\u TYPE=测试 然后在我的main.js中: if(extraConfig.BUILD_TYPE=='testing'){//do stuff}我以前做过这件事,但我使用

我正在使用electron builder打包React应用程序。我的应用程序使用CreateReact应用程序样板

是否有一种方法可以在编译时设置变量,以便在运行时在主进程的代码中的条件中使用它

我正在寻找一个相当于C的预处理器宏。所以我可以这样做:

electron builder--extraConfig BUILD\u TYPE=测试

然后在我的main.js中:


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

我以前做过这件事,但我使用的是
electron网页包
,除了您已有的:

electron^11.2.0
electron builder^22.9.1
电子网页^2.8.2
网页^4
其思想是通过
webpack.DefinePlugin
公开一个变量,您可以对主进程和渲染器进程都这样做

使用
electron-webpack
可以为两个进程提供
webpack
配置:

//webpack.main.config.js
const webpack=require('webpack');
module.exports={
插件:[新的webpack.DefinePlugin({{{uuuuuuuuuuuuuuuuuuuuuuuuuuuu玉米饼:true})]
};
//webpack.renderer.config.js
const webpack=require('webpack');
module.exports={
插件:[新的webpack.DefinePlugin({{{uu-TACO}:true}]
};
这两个文件通过
package.json
中的一点配置公开给
electron webpack

{
…
“电子网络包”:{
“主要”:{
“webpackConfig”:“webpack.main.config.js”
},
“渲染器”:{
“webpackConfig”:“webpack.renderer.config.js”
}
}
}
然后在你的主要过程中:

//src/main/index.js
const{app,BrowserWindow}=require('electron')
app.whenReady().然后(()=>{
const mainWindow=新浏览器窗口({webPreferences:{nodeIntegration:true}});

log(uuu BURRITO_uu?我会将
electron builder
命令放在一个NPM脚本中,然后预先运行另一个脚本,在
文件中设置
BUILD\u TYPE

像这样:

package.json

“脚本”:{
“distProd”:“node./setBuildType.js prod&&electron builder”,
“distDev”:“node./setBuildType.js dev&&electron builder”,
}
然后在
setBuildType.js中:

//process.argv[2]包含类型。
fs.writeFile('./BUILD_TYPE.txt',process.argv[2],函数(errObj){
if(errObj){
console.log(errObj);
}
});
然后从您的应用程序中,通过以下方式获取
构建类型

//从终端运行时,始终将'BUILD_TYPE'设置为'dev'。
如果(!app.ispackage){
var BUILD_TYPE=fs.readFileSync('./BUILD_TYPE.txt');
}否则{
var BUILD_TYPE='dev';
}
console.log(BUILD_TYPE);//输出“prod”或“dev”。

这将检查它是从安装程序运行还是从终端运行,如果它是从终端运行,那么它将始终将
BUILD\u TYPE
设置为
dev

谢谢!您是否正在使用create react app…?如果我按照上面的说明操作,我会得到一个错误
对实验语法“jsx”的支持当前未启用
然后
添加@babel/preset react(https://git.io/JfeDR)转到Babel配置的“预设”部分以启用转换
。有什么想法吗?我没有,但我肯定在我正在进行的项目中使用React和Babel,使用这种方法效果很好。设置Babel和React可能是一个漫长而令人沮丧的旅程!