当前位置: 首页 > news >正文

electron-vue项目从搭建、运行到打包(以及electron-vue的bug修改)

文章目录

    • 前言
    • 安装和运行
    • 运行会发现的错误
      • F12报错`http://localhost:9080/__webpack_hmr 404 (Not Found)`
      • 控制台报错`Unable to install vue-devtools`
      • 控制台报错`Multispinner is not defined`
      • F12报错`Object.fromEntries is not a function`
      • 执行npm run build无法打包 提示 `Identifier 'tasks' has already been declared`
    • 编译为exe安装文件

前言

Electron 是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架,它的出现让我们广大前端开发者的技术栈又多了一个分支。让我们使用JavaScript 代码就可创建在 Windows、macOS 和 Linux 上运行的跨平台应用程序。

在开发中,作为一名前端开发者,难免会想着用Vue和Electron结合起来开发。有人做了这件事

Electron-Vue诞生,它可以让我们快速的建立Electron项目,并且让我们专注于页面的开发

但是,在使用过程中,发现碰到的bug有点多,所以成功建立一个可成功运行可成功编译的项目,还要修改一些Electron自己的文件,做个记录。

安装和运行

安装Vue cli 脚手架 建议-g全局安装,也方便以后创建其他的项目

npm install -g @vue/cli
# OR
yarn global add @vue/cli

快速创建Electron-vue初始化项目

vue init simulatedgreg/electron-vue my-project

在这里插入图片描述
在这里插入图片描述

进入项目,并安装依赖

# Install dependencies and run your app
cd my-project
yarn # or npm install
yarn run dev # or npm run dev

运行会发现的错误

F12报错http://localhost:9080/__webpack_hmr 404 (Not Found)

解决:

找到

.electron-vue/dev-runner.js

const server = new WebpackDevServer(
      compiler,
      {
        contentBase: path.join(__dirname, '../'),
        quiet: true,
        //hot: true, // 注掉
        before (app, ctx) {
          app.use(hotMiddleware) // 注释解开
          ctx.middleware.waitUntilValid(() => {
            resolve()
          })
        }
      }
    )

控制台报错Unable to install vue-devtools

解决:

首先给项目安装vue-devtools

npm install vue-devtools --save-dev

接着找到

src/main/index.dev.js

修改代码:

/**
 * This file is used specifically and only for development. It installs
 * `electron-debug` & `vue-devtools`. There shouldn't be any need to
 *  modify this file, but it can be used to extend your development
 *  environment.
 */

/* eslint-disable */

// Install `electron-debug` with `devtron`
require('electron-debug')({ showDevTools: true })
// 增加方法
import {  BrowserWindow } from 'electron'; 

// Install `vue-devtools`
require('electron').app.on('ready', () => {
  // 以下的注掉
  // let installExtension = require('electron-devtools-installer')
  // installExtension.default(installExtension.VUEJS_DEVTOOLS)
  //   .then(() => {})
  //   .catch(err => {
  //     console.log('Unable to install `vue-devtools`: \n', err)
  //   })
  // 新增:安装vue-devtools
  BrowserWindow.addDevToolsExtension('node_modules/vue-devtools/vender')  //手动加载vue-devtools,前提是 npm install vue-devtools --save-dev
})

// Require `main` process to boot app
require('./index')

虽然解决了窗口增加vue-devtools的问题,也可以正常运行,但是控制台依然报错Extension server error: Operation failed: : has no execution context", source: chrome-devtools://devtools/bundled/inspector.js (7574),不过不影响使用。如果有大佬知道如何解决可以私聊我一下,谢谢!

控制台报错Multispinner is not defined

解决:

找到

.electron-vue/build.js

增加引用语句在文件前几行

const Multispinner = require(‘multispinner’)

F12报错Object.fromEntries is not a function

解决: 安装polyfill-object.fromentries

npm i polyfill-object.fromentries --save

再找到文件

.electron-vue/dev-client.js

头部加入

import ‘polyfill-object.fromentries’;

执行npm run build无法打包 提示 Identifier 'tasks' has already been declared

大概的错误就是build.js中tasks变量重复声明

解决:

找到:

.electron-vue/build.js

修改代码,修改其中一对的tasks变量名,需要注意的是本文件中一共包含四个tasks, 修改的时候注意不要改错

修改前:

  const tasks = ['main', 'renderer']
  const m = new Multispinner(tasks, {
    preText: 'building',
    postText: 'process'
  })

修改后

  const tasks1 = ['main', 'renderer']
  const m = new Multispinner(tasks1, {
    preText: 'building',
    postText: 'process'
  })

编译为exe安装文件

两种方式electron-builderelectron-packager,这里使用electron-builder

注意,此时你如果直接使用package.json里的build命令,虽然控制台在编译,但是结束后你会发现没有任何文件新增,

这里要安装一下electron-builder 推荐全局安装

npm i electron-builder -g

接着去项目里的package.json文件里,给build命令增加:

"scripts": {
    "build": "node .electron-vue/build.js && electron-builder",
    ... // 这里后面的不列出
  },

再增加编译的配置

"build": {
    "productName":"xxxx",//项目名 这也是生成的exe文件的前缀名
    "appId": "com.leon.xxxxx",//包名  
    "copyright":"xxxx",//版权  信息
    "directories": { // 输出文件夹
      "output": "build"
    }, 
    "nsis": {
      "oneClick": false, // 是否一键安装
      "allowElevation": true, // 允许请求提升。 如果为false,则用户必须使用提升的权限重新启动安装程序。
      "allowToChangeInstallationDirectory": true, // 允许修改安装目录
      "installerIcon": "./build/icons/aaa.ico",// 安装图标
      "uninstallerIcon": "./build/icons/bbb.ico",//卸载图标
      "installerHeaderIcon": "./build/icons/aaa.ico", // 安装时头部图标
      "createDesktopShortcut": true, // 创建桌面图标
      "createStartMenuShortcut": true,// 创建开始菜单图标
      "shortcutName": "xxxx", // 图标名称
      "include": "build/script/installer.nsh", // 包含的自定义nsis脚本
    },
    "publish": [
      {
        "provider": "generic", // 服务器提供商 也可以是GitHub等等
        "url": "http://xxxxx/" // 服务器地址
      }
    ],
    "files": [
      "dist/electron/**/*"
    ],
    "dmg": {
      "contents": [
        {
          "x": 410,
          "y": 150,
          "type": "link",
          "path": "/Applications"
        },
        {
          "x": 130,
          "y": 150,
          "type": "file"
        }
      ]
    },
    "mac": {
      "icon": "build/icons/icon.icns"
    },
    "win": {
      "icon": "build/icons/aims.ico",
      "target": [
        {
          "target": "nsis",
          "arch": [
            "ia32"
          ]
        }
      ]
    },
    "linux": {
      "icon": "build/icons"
    }
  }

接着在build文件夹内新增nsh文件

build/script/installer.nsh

编辑installer.nsh文件,增加内容

!macro preInit
    SetRegView 64
    WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\projectName\hhyh-tool"
    WriteRegExpandStr HkCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\projectName\hhyh-tool"
    SetRegView 32
    WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\projectName\hhyh-tool"
    WriteRegExpandStr HkCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\projectName\hhyh-tool"
!macroend

大致就是安装后或者安装前,设置或读取注册表。

此时,再运行npm run build就可以正常打包为.exe的安装文件了

相关文章:

  • 使用小爱同学语音控制电脑关机 - Winform C#
  • [附源码]Python计算机毕业设计仿咸鱼二手物品交易系统Django(程序+LW)
  • 31.前端笔记-CSS-CSS3盒子模型和其他特性
  • C语言split分割字符串
  • Python篇之编译py文件为pyc文件的方法总结
  • Windows学习总结(25)—— Windows 11 cmd 命令大全
  • 识破贷后资金归集——关联网络
  • 关于sysdiag的利用
  • 【推送位置苹果群发iMessage推】如果Windows和Linux实现不同的传输层协议,那末因为数据格式的不同
  • 12.6、后渗透测试--Windows系统下信息收集模块
  • 含参PDE(偏微分方程)的神经网络并行编程mpi4py
  • C/C++程序的断点调试 - Visual Studio Code
  • 墨家在中国为什么消失得这么彻底?
  • 面试必备:分库分表经典15连问
  • 微信支付-全面详解(学习总结---从入门到深化)
  • 230. Kth Smallest Element in a BST
  • Android 控件背景颜色处理
  • HTTP那些事
  • HTTP中GET与POST的区别 99%的错误认识
  • java小心机(3)| 浅析finalize()
  • JS基础之数据类型、对象、原型、原型链、继承
  • Object.assign方法不能实现深复制
  • Vue2.x学习三:事件处理生命周期钩子
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 力扣(LeetCode)21
  • 码农张的Bug人生 - 初来乍到
  • 那些年我们用过的显示性能指标
  • 驱动程序原理
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 小试R空间处理新库sf
  • 新手搭建网站的主要流程
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #QT(TCP网络编程-服务端)
  • #Z2294. 打印树的直径
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (4)logging(日志模块)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)共用体union的用法举例
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)c52学习之旅-流水LED灯
  • (四)图像的%2线性拉伸
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)h264中avc和flv数据的解析
  • .“空心村”成因分析及解决对策122344
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET6 命令行启动及发布单个Exe文件
  • .NET上SQLite的连接
  • .net专家(张羿专栏)
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Bean注解详解
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...