Maison >interface Web >js tutoriel >Tutoriel sur la création d'applications de bureau React et Webpack avec Electron
Electron peut utiliser HTML, CSS et JavaScript pour créer des applications de bureau multiplateformes. Cependant, lorsque vous utilisez React et Webpack, vous rencontrerez certains problèmes de configuration. Cet article fournira une solution générale pour la configuration d'Electron sous React+Webpack. Cet article présente principalement la méthode d'utilisation d'Electron pour créer des applications de bureau React+Webpack. L'éditeur pense que c'est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde.
Configuration de l'environnement
"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"
Configuration webpack.config.js
Étant donné que l'empaquetage Webpack par défaut est utilisé, un gros fichier de bundle sera généré, ce qui affecte les performances sur le bureau. Cependant, lors du débogage, le bundle doit être généré rapidement, mais le mappage source est nécessaire pour localiser les bogues, nous utilisons donc une fonction pour. Changer d'environnement :
module.exports = (env)=>{ ****** const isProduction = env==='production'; ****** devtool: isProduction ? 'source-map':'inline-source-map',
Et nous écrivons la commande suivante dans le fichier package.json :
"build:dev": "webpack", "build:prod":"webpack -p --env production",
Vous pouvez mieux changer d'environnement.
Ce qui suit est l'intégralité du 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/' } }; }
Remarque : cible : 'electron-renderer', laissez notre App Cela ne fonctionne que sous Electron lors du débogage.
React
Cette fois, j'ai écrit une application simple pour afficher l'heure. Le module React est le suivant :
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
Cette application n'implique pas l'API complexe Electron, c'est juste un conteneur pour l'affichage :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>Nous chargeons les js et css packagés par webpack en html.
Débogage
yarn run build:prod
yarn run electron
Créer l'application
Nous ajoutons la commande suivante au fichier package.json :"packager": "electron-packager . --platform=darwin --electron-version=1.7.9 --overwrite"
Améliorations
Tout le monde devrait remarquer que selon la méthode précédente, nous devons réutiliser le packaging du webpack à chaque fois que nous le modifions pendant le débogage. peut également utiliser webpack-dev-server pour surveiller les modifications. C'est juste que nous devons ajuster le projet :mainWindow.loadURL(`http://localhost:8080/index.html`);Exécutez à nouveau :
yarn run electron
mainWindow.loadURL(`file://${__dirname}/public/index.html`);pour procéder au prochaine opération de construction. Notez qu'avant de créer l'application finale, vous devez faire attention à savoir si le fichier Web s'exécute actuellement sous webpack-dev-server. Si tel est le cas, vous devez utiliser webpack pour générer des fichiers d'empaquetage statiques. Recommandations associées :
Introduction détaillée au développement JavaScript d'applications de bureau multiplateformes (images et texte)
Images de XML- applications de bureau basées sur Introduction détaillée du code texte
Utilisation d'électrons pour écrire des applications de bureau_html/css_WEB-ITnose
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!