<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:23:34
        文檔

        使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法

        使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法:前言 Electron可以使用HTML、CSS、JavaScript構(gòu)建跨平臺(tái)桌面應(yīng)用,可是在使用到React和Webpack時(shí),會(huì)遇到一些配置問題,本文將針對(duì)React+Webpack下的Electron配置提供一個(gè)通用的解決方案。 環(huán)境配置 babel-core: ^6.26.0,
        推薦度:
        導(dǎo)讀使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法:前言 Electron可以使用HTML、CSS、JavaScript構(gòu)建跨平臺(tái)桌面應(yīng)用,可是在使用到React和Webpack時(shí),會(huì)遇到一些配置問題,本文將針對(duì)React+Webpack下的Electron配置提供一個(gè)通用的解決方案。 環(huán)境配置 babel-core: ^6.26.0,

        前言

        Electron可以使用HTML、CSS、JavaScript構(gòu)建跨平臺(tái)桌面應(yīng)用,可是在使用到React和Webpack時(shí),會(huì)遇到一些配置問題,本文將針對(duì)React+Webpack下的Electron配置提供一個(gè)通用的解決方案。

        環(huán)境配置

         "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

        由于使用默認(rèn)的Webpack打包,會(huì)生成一個(gè)很大的bundle文件,在桌面端比較影響性能,而調(diào)試的時(shí)候卻需要較快地生成bundle,可是又需要使用sourcemap來定位bug,所以我們使用一個(gè)函數(shù)來切換各種環(huán)境:

        module.exports = (env)=>{
         ******
         const isProduction = env==='production';
         ******
         devtool: isProduction ? 'source-map':'inline-source-map',

        而我們?cè)趐ackage.json文件里,編寫以下命令:

        "build:dev": "webpack",
        "build:prod":"webpack -p --env production",

        就可以較好的切換環(huán)境。

        以下是全部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',讓我們的App在調(diào)試時(shí)只能在Electron下作用。

        React

        本次編寫的是一個(gè)簡(jiǎn)單的顯示時(shí)間的App,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 (
         <div>
         <h1>{timetext}</h1>
         </div>
         );
         }
        }
        export default Time;

        Electron

        本次的App不涉及復(fù)雜的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>
         <div id="app"></div>
         <script src="./dist/bundle.js"></script>
        </body>
        </html>
        

        我們將webpack打包的js和css加載到html中。

        調(diào)試

        yarn run build:prod

        首先我們用webpack打包文件,在dist/下生成bundle.js和style.css

        yarn run electron

        開始調(diào)試:

        構(gòu)建App

        我們?cè)趐ackage.json文件里添加如下命令:

        "packager": "electron-packager . --platform=darwin --electron-version=1.7.9 --overwrite"

        意思為構(gòu)建Mac桌面應(yīng)用,并覆蓋之前我們使用該命令構(gòu)建的文件。

        等待一會(huì)兒會(huì)在目錄下看到構(gòu)建好的文件夾,里面便是我們的桌面應(yīng)用。

        而在這時(shí)我們打開應(yīng)用,會(huì)發(fā)現(xiàn)其在調(diào)試中的導(dǎo)航欄菜單均已消失,只有一個(gè)退出選項(xiàng),這是因?yàn)槲覀儾]有設(shè)置應(yīng)用的菜單欄項(xiàng)目,Electron在構(gòu)建App時(shí)會(huì)舍去調(diào)試的各種菜單。

        改進(jìn)

        大家應(yīng)該注意到按照之前的方法,我們?cè)谡{(diào)試時(shí)每修改一次就要重用webpack打包,當(dāng)然也可以使用webpack-dev-server來監(jiān)測(cè)改變。只不過這樣我們需要對(duì)項(xiàng)目進(jìn)行調(diào)整:

        在index.js文件里修改loadURL為:

        mainWindow.loadURL(`http://localhost:8080/index.html`);

        再運(yùn)行:

        yarn run electron

        因?yàn)榇藭r(shí)我們是檢測(cè)的webpack-dev-server下的文件,此時(shí)我們?cè)陧?xiàng)目中做的修改就能實(shí)時(shí)在electron中看到了。

        若調(diào)試和測(cè)試完成,只需要修改loadURL為:

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

        即可進(jìn)行下一步構(gòu)建操作。

        !注意,在構(gòu)建最終應(yīng)用前應(yīng)該注意此時(shí)的web文件是否在webpack-dev-server下運(yùn)作,若是則應(yīng)該使用webpack生成靜態(tài)打包文件。

        本文項(xiàng)目文件地址:https://github.com/Voyager-One/react-webpack-electron

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法

        使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法:前言 Electron可以使用HTML、CSS、JavaScript構(gòu)建跨平臺(tái)桌面應(yīng)用,可是在使用到React和Webpack時(shí),會(huì)遇到一些配置問題,本文將針對(duì)React+Webpack下的Electron配置提供一個(gè)通用的解決方案。 環(huán)境配置 babel-core: ^6.26.0,
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV美女一区二区三区| 青青青国产在线观看免费网站| 免费大片黄在线观看| 亚洲AV综合永久无码精品天堂| 国产成人精品日本亚洲18图| 亚洲一本之道高清乱码| 亚洲AV无码精品蜜桃| 亚洲色精品VR一区区三区| 亚洲熟女www一区二区三区| 亚洲精品无码专区久久| 日韩精品亚洲专区在线影视| 黄网站在线播放视频免费观看| 欧洲乱码伦视频免费国产 | 国产成人在线观看免费网站| 日韩免费福利视频| 啊灬啊灬别停啊灬用力啊免费看| 亚洲AV无码乱码在线观看性色扶| 国产a v无码专区亚洲av| 国产v亚洲v天堂无码网站| 亚洲精品视频观看| 亚洲性线免费观看视频成熟 | 亚洲日韩在线第一页| 国产成人A人亚洲精品无码| 91精品国产亚洲爽啪在线影院| xxx毛茸茸的亚洲| 精品久久亚洲一级α| 中文字幕成人免费高清在线视频| 久久久久久久99精品免费| 国产桃色在线成免费视频 | 国产精品免费无遮挡无码永久视频| 麻花传媒剧在线mv免费观看| 最近2019中文字幕免费看最新| yy6080亚洲一级理论| 亚洲精品tv久久久久久久久| 亚洲欧洲校园自拍都市| 理论亚洲区美一区二区三区 | 亚洲妇女熟BBW| 免费激情网站国产高清第一页| 久久免费线看线看| 免费av欧美国产在钱| 亚洲一级片免费看|