electron-vue + element-ui构建桌面应用

最近需要用Node.js做一个桌面的应用,了解到electron可以用来做跨平台的桌面应用,而vue可以用来作为界面的解决方案,研究了一会儿如何把他们两个整合到一起使用,遇到了各种问题而放弃,毕竟作为一个非前端开发人员我的目的就是看这个东西能不能满足我的需求,而不想浪费太多的时间在上面,后来又看到了electron-vue,顾名思义就是将electron和vue整合到了一起直接使用,于是开始尝试搭建基于electron-vue的项目。

整个搭建过程对非前端开发来说还算可以,只是后面踩了两个坑费了一些时间,感觉应该大部分人都会遇到,因为我的一切步骤基本都是在官方文档的指导下完成的,如果出了问题那么很大可能是框架固有问题

根据官网给出的方法安装Node:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

这个步骤需要curl,如果发现没有安装curl,可以用下面的命令安装一下:

sudo apt install curl

然后通过:

node -v
npm -v

查看一下node和npm是否成功安装上

正常情况下,可以使用 npm install [module-name] 来安装需要的模块

但是npm下载模块的时候经常有各种各样的报错,大多数报错原因都在于npm下载速度太慢了,可以用cnpm(淘宝npm镜像)的方式来安装

获取cnpm:

npm install -g cnpm --registry=https://registry.npm.taobao.org

接下来就像使用npm一样来使用cnpm即可,如果在使用cnpm的过程中看到报错信息有permission denied相关,直接在命令的前面加sudo就好了

后面经过一番折腾,发现还是用全局安装vue-cli脚手架的方式最好:

[sudo] cnpm install -g vue-cli

继续,通过vue init使用electron-vue模板来初始化项目:

vue init simulatedgreg/electron-vue my-project

这个过程会先下载模板,等待一会儿之后就会弹出下面的提示来配置项目,这里强烈建议把use ESLint给禁掉,因为这个东西真的是很严格,导致我后面遇到了很多代码格式的问题,还是比较恶心的,其他的像是unit test的东西也不是很了解,而且也用不到就都给禁用了,免得出什么幺蛾子,其他的都可以直接一路Enter使用默认的即可

设置完成后同样也又相应的提示:

可以看到它已经给了提醒如何安装和运行,这里我没有使用yarn来运行,而是直接使用[sudo] cnpm install,然后cnpm run dev来运行(npm也可以,因为是用来运行而不是下载)

等待程序启动......

然后......

surprise!~

应用是看到了,可是里面有貌似是有报错啊:

process is not defined... 什么鬼,我还什么都没动呢,进程没有被定义?于是又去了解了一下主进程和渲染进程的知识,大概研究了一下放弃了,有点浪费时间而且直觉告诉我不是这个问题

可以看到报错信息找到src/index.ejs中,既然process没有定义,那简单粗暴点,直接删除了用到process的这段看看行不行:

结果还真就可以了,运行起来后是这样的:

如果觉得这个方式不靠谱,随便乱删原生代码感觉确实会有什么后遗症,可以看下面另一种解决方式。

发现Element里面的UI还是很好看的,想要使用一下,于是开始集成element-ui:

同样按照官网的顺序(直接搜索element-ui就能找到官网了很方便):

[sudo] cnpm i element-ui -S

然后按照文档中快速上手的指示,在src/renderer/main.js中修改如下:

import Vue from ‘vue‘
import axios from ‘axios‘
import ElementUI from ‘element-ui‘;  // 新添加
import ‘element-ui/lib/theme-chalk/index.css‘;  //新添加

import App from ‘./App‘
import router from ‘./router‘
import store from ‘./store‘
Vue.use(ElementUI);  // 新添加

if (!process.env.IS_WEB) Vue.use(require(‘vue-electron‘))
Vue.http = Vue.prototype.$http = axios
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  components: { App },
  router,
  store,
  template: ‘<App/>‘
}).$mount(‘#app‘)

去src/renderer/components/LandingPage.vue中开始体验element-ui,直接把element-ui上的示例代码复制过来运行,结果发现一个很诡异的事情,el-table这个表格组件好像很特殊!它怎么都显示不出来,除了它以外其他的控件都能正常显示

找了几个做web的同事来大概搂了一眼,都说代码写的没有问题,奇怪了,于是开始各种搜索,终于在github上面找到了答案:https://github.com/SimulatedGREG/electron-vue/issues/361

根据electron-vue作者自己的回复,element-ui需要加入到白名单里面,需要修改.electron-vue/webpack.renderer.config.js

将:

let whiteListedModules = [‘vue‘]

修改为:

let whiteListedModules = [‘vue‘, ‘element-ui‘]

然后表格控件就正常显示了!

偶然发现上面的process is not defined问题,在github上面也是有人提了issue的https://github.com/SimulatedGREG/electron-vue/issues/871,除了直接删除我截图中的代码的方式,还有一个在文件中添加代码的方式:

在.electron-vue/webpack.renderer.config.js和.electron-vue/webpack.web.config.js文件中都添加下面的代码:

然后重新运行就可以了,这样就可以开始做简单的项目了

原文地址:https://www.cnblogs.com/adorkable/p/11069923.html

时间: 2024-11-09 17:16:35

electron-vue + element-ui构建桌面应用的相关文章

vue + element ui 阻止表单输入框回车刷新页面

问题 在 vue+element ui 中只有一个输入框(el-input)的情况下,回车会提交表单. 解决方案 在 el-form 上加上 @submit.native.prevent 这个则会阻止表单回车提交. 测试 下面的代码出现表单回车提交 <body> <div id="app"> <el-form ref="form" :model="form" label-width="80px"&

vue+element UI实现分页组件

1.前言 在web页面中,常常需要将后台查询到的数据以表格形式展示出来,而这些数据量往往会非常庞大,如果将所有要展示的数据一次性请求获取并展示到页面上,那页面长度势必会变得非常的长,很不美观.更重要的是,如果数据量过于大,在页面加载时一次性请求全部数据将会耗费大量网络资源,性能极低.但是,如果我们可以将数据分页展示,这样页面首先不会变的冗长,另外只有用户点击页码才会发出请求并且每次请求的数据量也不会很大,这就极大的节省了网络资源,提高了性能.本文就以vue结合element UI实现一个数据分页

vue+element UI实现多级导航菜单

1.前言 在某次日常开发中,项目要求页面的导航菜单需要动态加载,即菜单不能在页面上写死,菜单上的数据由后端开发从数据库中获取返回给前端使用,前端拿到数据后再通过解析数据最终将菜单渲染出来.由于菜单有可能是多级的,所以我们需要使用递归的方式,一层一层的递归数据,将多级菜单完整显示出来.本篇博文借助element UI组件库中的Navmenu导航菜单组件,将其进行改造后封装成一个多级导航菜单组件. 2.工作流程 组件封装好之后,由父组件调用该组件,父组件先向后端发送请求获取菜单数据,然后将菜单数据传

vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、一级mockjs用法、路由懒加载三种方式

不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p>Element UI简单Cascader级联选择器使用</p> <el-cascader :options='options' v-model="selectedOptions" @change="handleChange"> </el-

vue+element ui项目总结点(三)富文本编辑器 vue-wangeditor

1.参考 https://www.npmjs.com/package/vue-wangeditor 使用该富文本编辑器 <template> <div class="egit_box"> <p>富文本编辑器试用</p> <div class="text_box" style="width: 100%;display: flex;justify-content: center;"> <

Vue+element UI实现“回到顶部”按钮组件

介绍 这是一个可以快速回到页面顶部的组件,当用户浏览到页面底部的时候,通过点击按钮,可快速回到页面顶部. 使用方法 由于该组件是基于element-UI进行二次封装的,所以在使用该组件时请务必安装element-UI(安装方式猛戳这里),安装好element-UI后,只需将该组件文件夹BackToTop导入到现有项目中即可使用. 使用示例 <template> <div id="app"> <!--可自定义按钮的样式.show/hide临界点.返回的位置

13.Vue+Element UI实现复制内容

1. 安装依赖包: npm  install vue-clipboard2  --save 2. main.js中引入 import Vue from 'vue' import VueClipboard from 'vue-clipboard2' Vue.use( VueClipboard ) 3.页面中使用: <el-input v-model="address" :title="address"></el-input> (:title的变

VUE+Element UI实现简单的表格行内编辑效果

原理是通过Css控制绑定的输入控件与显示值,在选中行样式下对控件进行隐藏或显示 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <!-- 引入样式 --> 7 <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-default/

vue+element ui 滚动加载

<div id="app"> <div class="infinite-list-wrapper" style="overflow:auto"> <ul class="list" v-infinite-scroll="load" infinite-scroll-disabled="disabled"> <li v-for="news i

vue+element ui +vue-quill-editor 富文本图片上传到骑牛云

vue-quill-editor上传图片会转换成base64格式,但是这不是我们想要的,之后翻了很多文章才找到想要的,下面直接上代码 <style lang="sass">.quill-editor min-height: 500px background:#fff .ql-container min-height: 500px .ql-snow .ql-editor img max-width: 480px .ql-editor .ql-video max-width: