当前位置:   article > 正文

vite+vue+electron的创建并使用electron-build打包

vite+vue+electron的创建并使用electron-build打包

前言

昨天用Vue+vite和electron做了一个俄罗斯方块游戏,然后写完踩了半天坑在打包上,今天把整个流程总结一下,因为只需要多点一个配置,一个vue项目就能变成一个app,非常大提高开发效率,实现了学会vue能用uniapp做安卓、ios、小程序,也能用electron做桌面应用。

本文无废话无原理,也是方便我以后忘了也能看。

四处搜索+gpt+文档得来的结果,为了演示我重新建了一个项目。

俄罗斯方块项目在这:

https://download.csdn.net/download/m0_73459939/89589427icon-default.png?t=N7T8https://download.csdn.net/download/m0_73459939/89589427这是setup.exe文件,代码请看下篇文章。

创建项目并配置electron

创建vue项目就不多说了,反正就是用Vite创建,具体可以看我上一篇文章,但是需要注意的是打包的时候路由需要切换成哈希(带#的,等会打包再说)。

创建完项目后首先是下载electron,文档里面给的是yarn和npm,yarn我没试验过,反正npm和pnpm都是下载不了的,不知道是不是镜像源的问题,但是我用cnpm就没这个问题。

create完项目之后

  1. npm i cnpm
  2. cnpm install
  3. cnpm run dev

然后下载election。

cnpm install electron --save-dev

然后开始配置electron的东西。

在package.json里面修改,好像author和description是需要改的,但是这个问题不大。就加几个注释里面的,其他创建项目完都是有的。

  1. {
  2. "name": "election_demo",
  3. "version": "0.0.0",
  4. "private": true,
  5. "type": "module",
  6. "main": "main.js",//必须加上的
  7. "description": "Russia cubes",//文档要求加上
  8. "author": "Ye",//文档要求加上
  9. "scripts": {
  10. "dev": "vite",
  11. "build": "vite build",
  12. "preview": "vite preview",
  13. "start": "electron ."//这个必须加上
  14. },
  15. "dependencies": {
  16. "cnpm": "^9.4.0",
  17. "vue": "^3.4.29",
  18. "vue-router": "^4.3.3"
  19. },
  20. "devDependencies": {
  21. "@vitejs/plugin-vue": "^5.0.5",
  22. "electron": "^31.3.0",
  23. "vite": "^5.3.1"
  24. }
  25. }

接下来创建main.js(注意!!!不要在src文件夹下创建,要在和src同级的)

  1. main.js
  2. import { app, BrowserWindow } from 'electron'
  3. import path from 'path'
  4. import { fileURLToPath } from 'url'
  5. import { dirname } from 'path'
  6. const __filename = fileURLToPath(import.meta.url)
  7. const __dirname = dirname(__filename)
  8. function createWindow() {
  9. console.log('Creating window...')
  10. const mainWindow = new BrowserWindow({
  11. width: 950,
  12. height: 850,
  13. title: "Russia cubes",
  14. icon: '@/assets/logo.ico',
  15. autoHideMenuBar: true,
  16. webPreferences: {
  17. preload: path.join(__dirname, 'preload.js'),
  18. devTools: false,// 禁用开发者工具
  19. webSecurity: false
  20. },
  21. // 加载 index.html
  22. })
  23. // 加载开发服务器提供的 URL(如果使用)
  24. const devServerUrl = 'http://localhost:5173' // 根据你的开发服务器配置进行调整
  25. mainWindow
  26. .loadURL(devServerUrl)//还没打包之前用url,打包之后用index
  27. //.loadFile('./dist/index.html')
  28. .then(() => {
  29. console.log('Loaded URL:', devServerUrl)
  30. })
  31. .catch((err) => {
  32. console.error('Failed to load URL:', err)
  33. })
  34. // 删除或注释掉打开开发者工具的代码
  35. mainWindow.webContents.openDevTools();
  36. }
  37. app.whenReady().then(() => {
  38. console.log('App is ready')
  39. createWindow()
  40. app.on('activate', function () {
  41. if (BrowserWindow.getAllWindows().length === 0) createWindow()
  42. })
  43. })
  44. app.on('window-all-closed', function () {
  45. if (process.platform !== 'darwin') app.quit()
  46. })

因为冲突不大,所以我基本是在vue里面写用h5去debug,把这里的开发者工具给禁用掉了。

然后创建preload.js,一样在main.js同级。

  1. preload.js
  2. window.addEventListener('DOMContentLoaded', () => {
  3. const replaceText = (selector, text) => {
  4. const element = document.getElementById(selector)
  5. if (element) element.innerText = text
  6. }
  7. for (const dependency of ['chrome', 'node', 'electron']) {
  8. replaceText(`${dependency}-version`, process.versions[dependency])
  9. }
  10. })

如果你问我为什么这样写,我也不知道,四处cv来的,能用。

到现在项目就能跑起来了。

  1. cnpm run dev
  2. cnpm run start

然后开发的活就各自干,两个之间互不冲突。

打包vue并配置electron

首先是打包文件(还没到打包成exe)

cnpm run build

然后有了一个dist文件之后就可以把main.js里面的load换掉了。

 路由也要换一下,一般我们是用createWebHistory,但是这里我们得换成createWebHashHistory,不然就会一片空白或者404(如果做了*返回404页面的话)。

  1. import { createRouter, createWebHashHistory } from 'vue-router'
  2. const router = createRouter({
  3. history: createWebHashHistory(),//加上这一句或者改成createWebHashHistory
  4. routes: [
  5. {
  6. path: '/',
  7. component: () => import('@/views/Home/HomePage.vue')
  8. }
  9. ]
  10. })
  11. export default router

然后在vite.config.js里面加上这一句

全部加上完成之后再cnpm run build一次,因为得把你改的这些打包进去。然后就可以实现启动h5和启动electron各自独立了。

启动electron

cnpm run start

好了,接下来就是打包exe了,坑最多的地方。

electron打包为exe

首先是下载electron-builder。注意-D不能丢掉,如果丢掉的话需要去package.json把    "electron-builder": "^24.13.3"从dependencies移动到devDependencies再cnpm install electron-builder -D一次。

cnpm install electron-builder -D

在package.json里面启动的地方加一行

  1. "scripts": {
  2. "dev": "vite",
  3. "build": "vite build",
  4. "preview": "vite preview",
  5. "start": "electron .",
  6. "exe-build": "electron-builder"//加上这一句
  7. },

然后这个时候运行进行打包。

cnpm run exe-build 

如果你是第一次的话,不用想太多,肯定是失败的,连接超时问题,开梯子、换镜像都一样。

根据你的错误提示,ctrl+链接可以直接下载(我下午配置过了,这里网上找几个图片,原理是一样的)。

图片来源:解决electron打包时,下载超时导致失败_electron打包时下载eletron超时-CSDN博客

其实是有三张图的,第一个是说electron下载失败,你可以直接ctrl这个链接下载,也可以记住版本后去github上下载。注意要对上版本。

Releases · electron/electron (github.com)icon-default.png?t=N7T8https://github.com/electron/electron/releases这个是下载electron的地址,光下载electron还不够,还需要去找到对应版本的SHASUMS256.txt,然后一起放在C:\Users\Ye\AppData\Local\electron\Cache的地方。

第一个报错就解决了。

然后第二个和第三个(就是上面两张图片)来这里下载,也就是winCodeSign和nsis

Releases · electron-userland/electron-builder-binaries (github.com)icon-default.png?t=N7T8https://github.com/electron-userland/electron-builder-binaries/releases?after=winCodeSign-2.2.0然后也是一样创建各自的文件夹和各自需要的东西,注意的是,这里不是C:\Users\Ye\AppData\Local\electron\Cache了,而是C:\Users\Ye\AppData\Local\electron-builder\Cache了。

winCodeSign只需要下载一项就行。而nisi有两项,有一个在下载地址的第二页。

在三个都下载好之后就会发现我们打包没问题了,也能成功出现exe文件了。

但是!不要高兴太早,现在去打开exe肯定就是一片空白。因为找不到文件,我感觉是没有打包进去。

我们再次来到package.json加上这段代码:

  1. "build": {
  2. "appId": "Ye.russiacubes",
  3. "files": [
  4. "dist/**/*",
  5. "main.js",
  6. "preload.js",
  7. "index.html",
  8. "src/**/*",
  9. "node_modules/**/*",
  10. "package.json"
  11. ],
  12. "asarUnpack": [
  13. "main.js",
  14. "preload.js"
  15. ],
  16. "win": {
  17. "icon": "src/assets/icon.ico",
  18. "target": [
  19. "nsis"
  20. ]
  21. },
  22. "nsis": {
  23. "oneClick": false,
  24. "allowToChangeInstallationDirectory": true
  25. }
  26. },

 在这个层级

 然后我们再次打包,运行一次cnpm run exe-build。

成功了!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/905471
推荐阅读
相关标签
  

闽ICP备14008679号