欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Webpack實戰(zhàn)之構(gòu)建 Electron 應用

 更新時間:2017年12月25日 11:30:29   作者:浩麟  
本篇文章主要介紹了Webpack實戰(zhàn)之構(gòu)建 Electron 應用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Electron 可以讓你使用開發(fā) Web 的技術(shù)去開發(fā)跨平臺的桌面端應用,由 Github 主導和開源,大家熟悉的 Atom 和 VSCode 編輯器就是使用 Electron 開發(fā)的。

Electron 是 Node.js 和 Chromium 瀏覽器的結(jié)合體,用 Chromium 瀏覽器顯示出的 Web 頁面作為應用的 GUI,通過 Node.js 去和操作系統(tǒng)交互。 當你在 Electron 應用中的一個窗口操作時,實際上是在操作一個網(wǎng)頁。當你的操作需要通過操作系統(tǒng)去完成時,網(wǎng)頁會通過 Node.js 去和操作系統(tǒng)交互。

采用這種方式開發(fā)桌面端應用的優(yōu)點有:

  1. 降低開發(fā)門檻,只需掌握網(wǎng)頁開發(fā)技術(shù)和 Node.js 即可,大量的 Web 開發(fā)技術(shù)和現(xiàn)成庫可以復用于 Electron;
  2. 由于 Chromium 瀏覽器和 Node.js 都是跨平臺的,Electron 能做到寫一份代碼在不同的操作系統(tǒng)運行。

在運行 Electron 應用時,會從啟動一個主進程開始。主進程的啟動是通過 Node.js 去執(zhí)行一個入口 JavaScript 文件實現(xiàn)的,這個入口文件 main.js 內(nèi)容如下:

const { app, BrowserWindow } = require('electron')
// 保持一個對于 window 對象的全局引用,如果你不這樣做,
// 當 JavaScript 對象被垃圾回收, window 會被自動地關閉
let win
// 打開主窗口
function createWindow() {
 // 創(chuàng)建瀏覽器窗口
 win = new BrowserWindow({ width: 800, height: 600 })
 // 加載應用的 index.html
 const indexPageURL = `file://${__dirname}/dist/index.html`;
 win.loadURL(indexPageURL);
 // 當 window 被關閉,這個事件會被觸發(fā)
 win.on('closed', () => {
  // 取消引用 window 對象
  win = null
 })
}

// Electron 會在創(chuàng)建瀏覽器窗口時調(diào)用這個函數(shù)。
app.on('ready', createWindow)

// 當全部窗口關閉時退出
app.on('window-all-closed', () => {
 // 在 macOS 上,除非用戶用 Cmd + Q 確定地退出
 // 否則絕大部分應用會保持激活
 if (process.platform !== 'darwin') {
  app.quit()
 }
})

主進程啟動后會一直駐留在后臺運行,你眼睛所看得的和操作的窗口并不是主進程,而是由主進程新啟動的窗口子進程。

應用從啟動到退出有一系列生命周期事件,通過 electron.app.on() 函數(shù)去監(jiān)聽生命周期事件,在特定的時刻做出反應。 例如在 app.on('ready') 事件中通過 BrowserWindow 去展示應用的主窗口。

啟動的窗口其實是一個網(wǎng)頁,啟動時會去加載在 loadURL 中傳入的網(wǎng)頁地址。 每個窗口都是一個單獨的網(wǎng)頁進程,窗口之間的通信需要借助主進程傳遞消息。

總體來說開發(fā) Electron 應用和開發(fā) Web 應用很相似,區(qū)別在于 Electron 的運行環(huán)境同時內(nèi)置了瀏覽器和 Node.js 的 API,在開發(fā)網(wǎng)頁時除了可以使用瀏覽器提供的 API 外,還可以使用 Node.js 提供的 API。

接入 Webpack

接下來做一個簡單的 Electron 應用,要求為應用啟動后顯示一個主窗口,在主窗口里有一個按鈕,點擊這個按鈕后新顯示一個窗口,且使用 React 開發(fā)網(wǎng)頁。

由于 Electron 應用中的每一個窗口對應一個網(wǎng)頁,所以需要開發(fā)2個網(wǎng)頁,分別是主窗口的 index.html 和新打開的窗口 login.html 。 也就是說項目由2個單頁應用組成,這和3-10管理多個單頁應用 中的項目非常相似,讓我們來把它改造成一個 Electron 應用。

需要改動的地方如下:

在項目根目錄下新建主進程的入口文件 main.js ,內(nèi)容和上面提到的一致;

主窗口網(wǎng)頁的代碼如下:

import React, { Component } from 'react';
import { render } from 'react-dom';
import { remote } from 'electron';
import path from 'path';
import './index.css';
class App extends Component {
 // 在按鈕被點擊時
 handleBtnClick() {
  // 新窗口對應的頁面的 URI 地址
  const modalPath = path.join('file://', remote.app.getAppPath(), 'dist/login.html');
  // 新窗口的大小
  let win = new remote.BrowserWindow({ width: 400, height: 320 })
  win.on('close', function () {
   // 窗口被關閉時清空資源
   win = null
  })
  // 加載網(wǎng)頁
  win.loadURL(modalPath)
  // 顯示窗口
  win.show()
 }
 render() {
  return (
   <div>
    <h1>Page Index</h1>
    <button onClick={this.handleBtnClick}>Open Page Login</button>
   </div>
  )
 }
}
render(<App/>, window.document.getElementById('app'));

其中最關鍵的部分在于在按鈕點擊事件里通過 electron 庫里提供的 API 去新打開一個窗口,并加載網(wǎng)頁文件所在的地址。

頁面部分的代碼已經(jīng)修改完成,接下來修改構(gòu)建方面的代碼。 這里構(gòu)建需要做到以下幾點:

構(gòu)建出2個可在瀏覽器里運行的網(wǎng)頁,分別對應2個窗口的界面;

  1. 由于在網(wǎng)頁的 JavaScript 代碼里可能會有調(diào)用 Node.js 原生模塊或者 electron 模塊,也就是輸出的代碼依賴這些模塊。但由于這些模塊都是內(nèi)置支持的,構(gòu)建出的代碼不能把這些模塊打包進去。
  2. 要完成以上要求非常簡單,因為 Webpack 內(nèi)置了對 Electron 的支持。 只需要給 Webpack 配置文件加上一行代碼即可,如下:
target: 'electron-renderer',

這句配置曾在2-7其它配置項-Target中提到,意思是指讓 Webpack 構(gòu)建出用于 Electron 渲染進程用的 JavaScript 代碼,也就是這2個窗口需要的網(wǎng)頁代碼。

以上修改都完成后重新執(zhí)行 Webpack 構(gòu)建,對應的網(wǎng)頁需要的代碼都輸出到了項目根目錄下的 dist 目錄里。

為了以 Electron 應用的形式運行,還需要安裝新依賴:

# 安裝 Electron 執(zhí)行環(huán)境到項目中
npm i -D electron

安裝成功后在項目目錄下執(zhí)行 electron . 你就能成功看到啟動的桌面應用了,效果如圖:

本實例提供項目完整代碼

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JS快速實現(xiàn)移動端拼圖游戲

    JS快速實現(xiàn)移動端拼圖游戲

    最近開發(fā)一個有關手機端拼圖游戲,是基于js實現(xiàn)的。今天小編抽時間把具體實現(xiàn)代碼分享到腳本之家平臺供大家參考,對js移動端拼圖游戲感興趣的朋友參考下吧
    2016-09-09
  • 全面了解addEventListener和on的區(qū)別

    全面了解addEventListener和on的區(qū)別

    下面小編就為大家?guī)硪黄媪私鈇ddEventListener和on的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • javascript實現(xiàn)對表格元素進行排序操作

    javascript實現(xiàn)對表格元素進行排序操作

    這篇文章主要介紹了javascript實現(xiàn)對表格元素進行排序操作,分別可以實現(xiàn)點擊之后排序和還原,和排升序和降序的功能,文章末尾附完整代碼,感興趣的小伙伴們可以參考一下
    2015-11-11
  • HTML中使背景圖片自適應瀏覽器大小實例詳解

    HTML中使背景圖片自適應瀏覽器大小實例詳解

    這篇文章主要介紹了HTML中使背景圖片自適應瀏覽器大小實例詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • js保留兩位小數(shù)方法總結(jié)

    js保留兩位小數(shù)方法總結(jié)

    本篇文章給大家總結(jié)了js保留兩位小數(shù)的各種方法以及每種方法的實例代碼分析,如果大家對此有需要,一起來學習下js保留兩位小數(shù)的方法吧。
    2018-01-01
  • 表格單元格交錯著色實現(xiàn)思路及代碼

    表格單元格交錯著色實現(xiàn)思路及代碼

    重點在于:以空間換時間,循環(huán)確定所著顏色;base確定起始顏色,i確定本次需要著色的單元格,感興趣的朋友可以參考下哈
    2013-04-04
  • 深入認識javascript中的eval函數(shù)

    深入認識javascript中的eval函數(shù)

    發(fā)現(xiàn)為本文起一個合適的標題還不是那么容易,呵呵,所以在此先說明下本文的兩個目的.
    2009-11-11
  • 微信小程序如何訪問公眾號文章

    微信小程序如何訪問公眾號文章

    這篇文章主要介紹了微信小程序如何訪問公眾號文章,隨著小程序不斷的發(fā)展,現(xiàn)在個人的小程序也開放了很多功能了,個人小程序直接打開公眾號鏈接。在群里看到的一款小程序,點擊可以直接閱讀文章了,需要的朋友可以參考下
    2019-07-07
  • 下載文件個別瀏覽器文件名亂碼解決辦法

    下載文件個別瀏覽器文件名亂碼解決辦法

    下載文件個別瀏覽器文件名亂碼解決辦法,需要的朋友可以參考一下
    2013-03-03
  • Bootstrap 模態(tài)框自定義點擊和關閉事件詳解

    Bootstrap 模態(tài)框自定義點擊和關閉事件詳解

    今天小編就為大家分享一篇Bootstrap 模態(tài)框自定義點擊和關閉事件詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論