使用Electron构建React+Webpack桌面应用的方法

前端之家收集整理的这篇文章主要介绍了使用Electron构建React+Webpack桌面应用的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

Electron可以使用HTML、CSS、JavaScript构建跨平台桌面应用,可是在使用到React和Webpack时,会遇到一些配置问题,本文将针对React+Webpack下的Electron配置提供一个通用的解决方案。

环境配置

css-loader": "^0.28.7","electron": "^1.7.9","electron-packager": "^10.1.0","extract-text-webpack-plugin": "^3.0.2","node-sass": "^4.7.2","react": "^16.2.0","react-dom": "^16.2.0","sass-loader": "^6.0.6","style-loader": "^0.19.1","webpack": "^3.10.0","webpack-dev-server": "^2.9.7"

配置webpack.config.js

由于使用默认的Webpack打包,会生成一个很大的bundle文件,在桌面端比较影响性能,而调试的时候却需要较快地生成bundle,可是又需要使用sourcemap来定位bug,所以我们使用一个函数来切换各种环境:

{ ****** const isProduction = env==='production'; ****** devtool: isProduction ? 'source-map':'inline-source-map',

而我们在package.json文件里,编写以下命令:

就可以较好的切换环境。

以下是全部webpack.config.js:

{ const isProduction = env==='production'; const CSSExtract = new ExtractTextPlugin('styles.css'); console.log('env='+env); return { entry:'./src/app.js',target: 'electron-renderer',output:{ path:path.join(__dirname,'public','dist'),filename:'bundle.js' },module:{ rules:[{ loader: 'babel-loader',test: /\.js(x)?$/,exclude: /node_modules/ },{ test: /\.s?css$/,use:CSSExtract.extract({ use:[ { loader:'css-loader',options:{ sourceMap:true } },{ loader:'sass-loader',options:{ sourceMap:true } } ] }) }] },plugins:[ CSSExtract ],devtool: isProduction ? 'source-map':'inline-source-map',devServer:{ contentBase: path.join(__dirname,'public'),historyApiFallback:true,publicPath:'/dist/' } }; }

注意:target: 'electron-renderer',让我们的App在调试时只能在Electron下作用。

React

本次编写的是一个简单的显示时间的App,React 模块如下:

{ this.setState(()=>{ return { time:this.getTime() } }); },1000); } render(){ let timetext = this.state.time; return (

{timetext}

); } } export default Time;

Electron

本次的App不涉及复杂的Electron API,仅仅作为展示的容器:

{ mainWindow = new BrowserWindow({}); mainWindow.loadURL(`file://${__dirname}/public/index.html`); });

index.html

<Meta charset="UTF-8"> <Meta name="viewport" content="width=device-width,initial-scale=1.0"> <Meta http-equiv="X-UA-Compatible" content="ie=edge"> React-Webpack-Electron

猜你在找的JavaScript相关文章