二、Electron + Webpack + Vue 搭建开发环境及打包安装

摘要:
DOCTYPE html˃2345electric678HelloElectric9103。添加npm命令/p

目录

  1. Webpack + Vue 搭建开发环境及打包安装 ------- 打包渲染进程
  2. Electron + Webpack  搭建开发环境及打包安装 ------- 打包主进程
  3. Electron + Webpack + Vue 搭建开发环境及打包安装 ---- 打包electron应用
二、打包主线程

1. 项目目录结构

  首先创建一个项目文件夹main 然后在该文件夹中执行 npm init -y 命令

二、Electron + Webpack + Vue 搭建开发环境及打包安装第1张

   目录结构说明:

  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              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" 

二、Electron + Webpack + Vue 搭建开发环境及打包安装第2张

4. 安装所需依赖

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

二、Electron + Webpack + Vue 搭建开发环境及打包安装第3张

吐槽一句:昨天在写博客的时候 webpack 还是 5.10.3 版本今天就变成 5.11.0版本了

5. 运行npm 脚本

  在项目的目录下运行   npm run dev 运行成功将会看到如下界面

二、Electron + Webpack + Vue 搭建开发环境及打包安装第4张

   然后会自动弹出electron App 窗口界面  如下效果表示配置成功

二、Electron + Webpack + Vue 搭建开发环境及打包安装第5张

6. 测试热加载是否生效

  打开 /src/main.js 对其中的代码进行修改然后再次保存,electron App 窗口会里面重新关闭并自动重启编译,表示热加载配置成功

7. 总结

  至于还有打包生成exe可执行文件在下一节中一起打包的时候再进行说明,最后就是在这里附上源码地址 https://github.com/Liting1/webpack5-electron

 如果有问题可以留言讨论

免责声明:文章转载自《二、Electron + Webpack + Vue 搭建开发环境及打包安装》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决 django.db.utils.OperationalError: (1051, "Unknown table 'mydorm.users_studen t'")SQL和NoSQL下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

自己写了一个war3窗口模式限定鼠标软件

由于魔兽3不支持宽屏,所以需要鼠标限定软件,以前一直是用的shaquila的war3窗口模式限定鼠标软件,他这个软件还算小巧好用,该有的功能都有,基本上也没有什么bug。但用着用着就觉得有点不大爽的地方: 当限定后切换出去比较麻烦。切换时需要首先切换到限定工具的窗口,点击解除锁定,切换回来时要重复该过程;当打开的窗口较多时切换比较麻烦。否则会别强行切换...

win10 显示详细信息窗格

win10 显示详细信息窗格 CreateTime--2018年5月26日09点13分 Author:Marydon 1.说明: win10无法像win7那样将详细信息窗格显示在窗口的底部,只能显示在窗口右侧,这个你无法改变,只能适应! 2.方法 菜单栏-->查看-->选中"详细信息窗格"-->右侧即会显示你所选中的文件的详细信息   ...

Android多开/分身检测

原文:https://blog.darkness463.top/2018/05/04/Android-Virtual-Check/ 多开/分身原本用于方便有多个微信/QQ解决同时登录的问题,但近来年被各种黑产所利用,多见于薅羊毛,部分多开App甚至提供了篡改功能。对于普通用户根本不会有多开的需求的App,一旦检测到当前运行在多开环境下,有理由限制该用户的后...

软件自启动方式c#

软件自启动的方式 参考文档: https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee851671(v=msdn.10)?redirectedfrom=MSDN   建议方式:1.快捷方式,2.2CurrentUser注册表(测试代码见7、8章节) 1.  将软件的快捷方式...

二、常用固件升级

1.什么是固件?        固件(Firmware)就是写入EPROM(电可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。这种设备内部保存的设备“驱动程序”,通过这种驱动程序,操作系统才能标准的实现机器的特定运行。同样,固件也是担任着一个系统最基础最底层工作的软件,这是硬件设备的灵魂,有一些设备除了固件,在没有任何的软件,因此,可以...

模块化导出导入的几种方式

转载自:https://www.cnblogs.com/baixinL/p/12163811.html require: node 和 es6 都支持的引入 export / import : 只有es6 支持的导出引入 module.exports / exports: 只有 node 支持的导出   Node里面的模块系统遵循的是Common...