Electron は HTML、CSS、JavaScript を使用してクロスプラットフォームのデスクトップ アプリケーションを構築できますが、React と Webpack を使用する場合、この記事では React+Webpack での Electron 構成の一般的な解決策を説明します。この記事では、Electron を使用して React+Webpack デスクトップ アプリケーションを構築する方法を主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。
環境構成
"babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-env": "^1.6.1", "babel-preset-react": "^6.24.1", "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パッケージを使用しているため、大きなバンドルファイルが生成され、デスクトップ上のパフォーマンスに影響しますが、デバッグ時にはバンドルをすばやく生成するには、ソースマップを使用してバグを見つける必要もあるため、さまざまな環境を切り替える関数を使用します:
module.exports = (env)=>{ ****** const isProduction = env==='production'; ****** devtool: isProduction ? 'source-map':'inline-source-map',
そして、package.json ファイルに次のコマンドを記述します:
"build:dev": "webpack", "build:prod":"webpack -p --env production",
環境をより適切に切り替えることができます。
以下はすべて webpack.config.js です:
const webpack = require('webpack'); const path = require('path'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = (env)=>{ 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' なので、アプリはデバッグ中に Electron でのみ動作します。
React
今回は時間を表示する簡単なアプリを書きました。Reactモジュールは次のとおりです:
import React from 'react'; class Time extends React.Component{ state = { time:'' } getTime(){ let date = new Date(); let Year = date.getFullYear(); let Month = date.getMonth(); let Day = date.getDate(); let Hour = date.getHours(); let Minute = date.getMinutes(); let Seconds = date.getSeconds(); let time = Year+'年'+Month+'月'+Day+'日'+Hour+':'+Minute+':'+Seconds; return time; } componentDidMount(){ setInterval(()=>{ this.setState(()=>{ return { time:this.getTime() } }); },1000); } render(){ let timetext = this.state.time; return ( <p> <h1>{timetext}</h1> </p> ); } } export default Time;
Electron
このアプリは複雑なElectron APIを使用せず、表示するだけです。コンテナ:
const electron = require('electron'); const {app,BrowserWindow} = electron; let mainWindow = electron; app.on('ready',()=>{ mainWindow = new BrowserWindow({}); mainWindow.loadURL(`file://${__dirname}/public/index.html`); });
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>React-Webpack-Electron</title> <link rel="stylesheet" type="text/css" href="./dist/styles.css" rel="external nofollow" > </head> <body> <p id="app"></p> <script src="./dist/bundle.js"></script> </body> </html>
webpackでパッケージ化されたjsとcssをhtmlに読み込みます。
デバッグ
yarn run build:prod
yarn run build:prod
首先我们用webpack打包文件,在dist/下生成bundle.js和style.css
yarn run electron
开始调试:
构建App
我们在package.json文件里添加如下命令:
"packager": "electron-packager . --platform=darwin --electron-version=1.7.9 --overwrite"
意思为构建Mac桌面应用,并覆盖之前我们使用该命令构建的文件。
等待一会儿会在目录下看到构建好的文件夹,里面便是我们的桌面应用。
而在这时我们打开应用,会发现其在调试中的导航栏菜单均已消失,只有一个退出选项,这是因为我们并没有设置应用的菜单栏项目,Electron在构建App时会舍去调试的各种菜单。
改进
大家应该注意到按照之前的方法,我们在调试时每修改一次就要重用webpack打包,当然也可以使用webpack-dev-server来监测改变。只不过这样我们需要对项目进行调整:
在index.js文件里修改loadURL为:
mainWindow.loadURL(`http://localhost:8080/index.html`);
再运行:
yarn run electron
yarn runの下にbundle.jsとstyle.cssを生成します。電子
アプリを構築します
package.json ファイルに次のコマンドを追加します:"packager" : " electric-packager . --platform=darwin --electron-version=1.7.9 --overwrite"
しばらく待つと、ディレクトリに構築されたフォルダーが表示されます。これがデスクトップアプリケーションです。
🎜改善点🎜🎜🎜 前述の方法によれば、デバッグ中に変更するたびに webpack パッケージを再利用する必要があることに誰もが気づくはずです。 もちろん、変更を監視するために webpack-dev-server を使用することもできます。プロジェクトを調整する必要があるだけです: 🎜🎜🎜index.js ファイルのloadURLを次のように変更します: 🎜🎜🎜🎜🎜
mainWindow.loadURL(`file://${__dirname}/public/index.html`);
yarn run electric
🎜🎜🎜現時点では、webpack-dev-server の下にあるファイルが検出されているため、プロジェクトに加えた変更はリアルタイムで Electron で確認できます。 🎜🎜🎜デバッグとテストが完了したら、次のビルド操作に進むには、loadURL を 🎜🎜🎜🎜🎜rrreee🎜 に変更するだけです。 🎜🎜最終的なアプリケーションをビルドする前に、現時点で Web ファイルが webpack-dev-server で実行されているかどうかに注意する必要があることに注意してください。実行されている場合は、webpack を使用して静的パッケージ ファイルを生成する必要があります。 🎜🎜関連する推奨事項: 🎜🎜🎜クロスプラットフォームデスクトップアプリケーション (グラフィックスとテキスト) の JavaScript 開発の詳細な紹介🎜🎜🎜🎜 XML ベースのデスクトップアプリケーション用のグラフィックコードとテキストコードの詳細な紹介🎜🎜🎜🎜electron を使用してデスクトップを作成するapplication_html/css_WEB- ITnose🎜🎜🎜以上がElectron を使用した React および Webpack デスクトップ アプリケーションの構築に関するチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。