目錄
- Webpack + Vue 搭建開發環境及打包安裝 ------- 打包渲染進程
- Electron + Webpack 搭建開發環境及打包安裝 ------- 打包主進程
- 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 } = 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. 安裝所需依賴
- webpack
- webpack-cli
- electron-dev-webpack-plugin
- babel-loader
- node-loader
- electron
- @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
如果有問題可以留言討論