Electron + Vue 集成记(踩坑记)

注意:
这个是集成 2.x 版本的Vue,如果想集成 3.x 的,看这里!

这几天想用Electron做一个PC程序出来,于是想用Electron 集成Vue来做。万万没有想到都是使用 npm 来安装的 Electron 和 Vue,集成两者竟然花了一天多的时间!这一天中,遇到过手动集成白屏的,不会解决,试过好几个库 npm install 报错的,也解决不了。幸好最后还是集成好了。下面是集成步骤(踩坑记)。

集成后效果图

一、开发环境的准备

1、安装 Node.js 坏境

从 node.js 官网地址 下载直接安装即可。

2、安装 Vue Cli(安装慢的话,可以使用淘宝镜像cnpm替代npm)

npm install @vue/cli -g
npm install @vue/cli-service -g
npm install webpack -g

3、全局安装 Electron

npm install -g electron

4、查看是否安装成功 :

C:\>node -v
v16.6.2

C:\>vue -V
@vue/cli 4.5.13

C:\>electron -v

v13.1.9

二、搭建vue项目

  1. 首先使用 vue-cli 搭建基础 vue框架
C:\>vue init webpack vue-demo

2、到vue-demo目录下,执行:

C:\vue-demo>npm run dev

 DONE  Compiled successfully in 4453ms                                                                     上午2:39:20

 I  Your application is running here: http://localhost:8080

浏览器打开http://localhost:8080
此时显示的是

至此,搭建vue成功。

三、集成 Electron

我们使用 “Vue CLI Plugin Electron Builder” 来集成Electron,只需要一步:

# 在项目下命令行执行
vue add electron-builder

安装完成后,我们打开开发服务器:

npm run electron:serve

将项目打包成exe,可以使用下面的命令:

npm run electron:build

四、踩坑记

1、执行 npm run electron:servenpm run electron:build 时出现:

'vue-cli-service' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

解决办法见 这里

2、执行 npm run electron:servenpm run electron:build 时出现:

node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'vue-cli-plugin-electron-builder'
Require stack:
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\bin\vue-cli-service.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:94:18)
    at idToPlugin (C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js:145:14)
    at C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js:184:20
    at Array.map ()
    at Service.resolvePlugins (C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js:170:10)
    at new Service (C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js:32:25)
    at Object. (C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\bin\vue-cli-service.js:15:17) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\\Users\\Fan\\AppData\\Roaming\\npm\\node_modules\\@vue\\cli-service\\lib\\Service.js',
    'C:\\Users\\Fan\\AppData\\Roaming\\npm\\node_modules\\@vue\\cli-service\\bin\\vue-cli-service.js'
  ]
}

解决办法:全局安装 ‘vue-cli-plugin-electron-builder’

npm -g install vue-cli-plugin-electron-builder

3、执行 npm run electron:servenpm run electron:build 时出现:

 INFO  Starting development server...
 ERROR  Error: Cannot find module 'vue-template-compiler/package.json'
Require stack:
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\config\base.js
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\bin\vue-cli-service.js
Error: Cannot find module 'vue-template-compiler/package.json'
Require stack:
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\config\base.js
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js
- C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\bin\vue-cli-service.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:94:18)
    at C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\config\base.js:81:34
    at C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js:236:40
    at Array.forEach ()
    at Service.resolveChainableWebpackConfig (C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js:236:26)
    at Service.resolveWebpackConfig (C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\Service.js:240:48)
    at PluginAPI.resolveWebpackConfig (C:\Users\Fan\AppData\Roaming\npm\node_modules\@vue\cli-service\lib\PluginAPI.js:132:25)

解决办法:全局安装 ‘vue-template-compiler’

4、执行 npm run electron:serve 时出现:

 INFO  Launching Electron...
Failed to fetch extension, trying 4 more times
Failed to fetch extension, trying 3 more times
Failed to fetch extension, trying 2 more times
Failed to fetch extension, trying 1 more times
Failed to fetch extension, trying 0 more times
Vue Devtools failed to install: Error: net::ERR_CONNECTION_TIMED_OUT

这个是默认安装vue-devtools插件,不过因为网络问题,安装不上导致的,安装不上暂时没有问题,解决办法:注释项目下 src/background.js 里面相关的代码

app.on('ready', async () => {
  if (isDevelopment && !process.env.IS_TEST) {
    // Install Vue Devtools
    try {
      //await installExtension(VUEJS_DEVTOOLS)    // 注释这一行
    } catch (e) {
      console.error('Vue Devtools failed to install:', e.toString())
    }
  }
  createWindow()
})

如果一定要安装vue-devtools插件,参考这篇文章。

5、执行 npm run electron:serve 时App出现白屏,没有出现vue的页面:
仔细看App的DevTools中的Console出现的错误,没错,是它导致的:

You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

解决办法:在项目根目录创建vue.config.js文件,编写如下代码。

module.exports = {
  runtimeCompiler: true
}

你可能感兴趣的:(Electron + Vue 集成记(踩坑记))