1. 程式人生 > 實用技巧 >二、Electron + Webpack + Vue 搭建開發環境及打包安裝

二、Electron + Webpack + Vue 搭建開發環境及打包安裝

目錄

  1. Webpack + Vue 搭建開發環境及打包安裝 ------- 打包渲染程序
  2. Electron + Webpack 搭建開發環境及打包安裝 ------- 打包主程序
  3. Electron + Webpack + Vue 搭建開發環境及打包安裝 ---- 打包electron應用

二、打包主執行緒

1. 專案目錄結構

  首先建立一個專案資料夾main 然後在該資料夾中執行 npm init -y 命令

  目錄結構說明:

  main

   | - app   檔案輸出目錄

   | - builder  構建配置目錄

     | - webpack.config.js

   | - src    資原始檔目錄

     | - createWindow

       | - index.js

     | - index.html

     | main.js

  | - package.json

2. 書寫配置檔案

  /builder/webpack.config.js   新增一下程式碼

 1 const path = require('path');
 2 const webpack = require('webpack');
 3 const { dependencies } = require('../package.json');
 4 const ElectronDevWebpackPlugin = require('
electron-dev-webpack-plugin'); 5 6 module.exports = { 7 // 配置開發模式 8 mode: 'development', 9 entry: { 10 // 配置入口檔案 11 main: path.join(__dirname, '../src/main.js') 12 }, 13 // 配置出口檔案 14 output: { 15 path: path.join(__dirname, '../app/'), 16 libraryTarget: '
commonjs2', 17 filename: '[name].js' 18 }, 19 // 監聽檔案改變 20 watch: true, 21 optimization: { 22 minimize: true, 23 }, 24 module: { 25 rules: [{ 26 test: /\.js$/, 27 loader: 'babel-loader', 28 exclude: /node_modules/ 29 }, { 30 test: /\.node$/, 31 loader: 'node-loader' 32 }] 33 }, 34 externals: [ 35 ...Object.keys(dependencies || {}) 36 ], 37 node: { 38 __dirname: true, 39 __filename: true 40 }, 41 plugins: [ 42 new webpack.DefinePlugin({}), 43 new ElectronDevWebpackPlugin() 44 ], 45 target: 'electron-main' 46 }

  /builder/dev.js 新增一下程式碼

 1 const webpack = require('webpack');
 2 const mainConfig = require('./webpack.config.js');
 3 
 4 function mainDev(){
 5    // 執行 webpack打包
 6     webpack(mainConfig, err => {
 7         if(err){
 8             console.log('打包主程序遇到Error!');
 9         } else {
10             console.log("打包主程序成功");
11         }
12     })
13 }
14 
15 mainDev();

  /src/mian.js  新增一下程式碼

 1 const electron = require('electron');
 2 const { createMianWin } = require('./createWindow');
 3 const path = require("path");
 4 
 5 class App {
 6     constructor({app, BrowserWindow}){
 7         this.BrowserWindow = BrowserWindow;
 8         this.app = app;
 9         this.win = null;
10         this.eventHandle(app);
11     }
12     createWindow(){
13         this.win = createMianWin();
14         let filePath = path.join(__dirname, './index.html');
15         this.win.loadFile(filePath);
16         // 等待渲染程序頁面載入完畢再顯示視窗
17         this.win.once('ready-to-show', () => this.win.show())
18     }
19     eventHandle(app){
20         app.on('closed', () => this.closed());
21         app.on('ready', () => this.ready());
22         app.on('window-all-closed', () => this.windowAllClosed());
23         app.on('activate', () => this.activate());
24     }
25     activate(){
26         if(!this.win) this.createWindow();
27     }
28     windowAllClosed(){
29         if(process.platform !== 'darwin') this.app.quit();
30     }
31     ready(){
32         this.createWindow();             // 建立主視窗
33     }
34     closed(){
35         this.win = null;
36     }
37 }
38 
39 let app = new App(electron);

  /src/createWindow/index.js   新增如下程式碼 

 1 const { BrowserWindow, dialog } = require('electron');
 2 
 3 module.exports = {
 4     createMianWin(options = {}){
 5         options = Object.assign({
 6             width: 1200,    // 視窗寬度
 7             height: 800,    // 視窗高度
 8             // autoHideMenuBar:true,
 9             backgroundColor: '#fff',    // 視窗背景顏色
10             show: false,                // 建立視窗後不顯示視窗
11             hasShadow: false,
12             webPreferences:{
13                 nodeIntegration: true, // 在渲染程序引入node模組
14             }
15         }, options);
16         return new BrowserWindow(options);
17     }
18 }

  /src/index.html   新增如下程式碼

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>electron</title>
 6 </head>
 7 <body>
 8     <h1>Hello Electron</h1>
 9 </body>
10 </html>

3. 新增npm 命令  

  /package.json   新增 npm 指令碼命令

  "dev": "node ./builder/dev.js"

4. 安裝所需依賴

  1. webpack
  2. webpack-cli
  3. electron-dev-webpack-plugin
  4. babel-loader
  5. node-loader
  6. electron
  7. @babel/core

吐槽一句:昨天在寫部落格的時候 webpack 還是 5.10.3 版本今天就變成 5.11.0版本了

5. 執行npm 指令碼

  在專案的目錄下執行  npm run dev 執行成功將會看到如下介面

  然後會自動彈出electron App 視窗介面 如下效果表示配置成功

6. 測試熱載入是否生效

  開啟 /src/main.js 對其中的程式碼進行修改然後再次儲存,electron App 視窗會裡面重新關閉並自動重啟編譯,表示熱載入配置成功

7. 總結

  至於還有打包生成exe可執行檔案在後面 進行組合一起的時候再進行說明,最後就是在這裡附上原始碼地址https://github.com/Liting1/webpack5-electron

 如果有問題可以留言討論