当前位置: 首页 > Web前端 > CSS

基于Vue+Electron构建桌面应用实践

时间:2023-03-30 15:55:27 CSS

Electron是GitHub开发的一个开源库,用于使用HTML、CSS和JavaScript构建跨平台桌面应用。Electron通过将Chromium和Node.js组合成一个运行时来实现这一点,并且可以为Mac、Windows和Linux打包应用程序。为了快速开始,我正在使用GregHolguin的electron-vue样板。它为开发者提供了vue-cliscanffolding、常用的Vue插件、打包器、测试、开发工具和其他功能。我们要建造什么?我们将基于OpenWeatherMapAPI构建与上一篇文章中所述相同的应用程序,以查看用户选择的城市的天气。如果您只想查看Electron驱动的应用程序的最终代码,请单击此处:https://github.com/NataliaTep...安装Electron-vue样板文件是作为VueCLI2.x的模板构建的,包括自定义应用程序选项.因此,需要全局安装:npminstall-gvue-cli如果你喜欢使用最新版本的VueCLI,你需要安装全局桥:npminstall-g@vue/cli@vue/cli-init然后,初始化你的项目:vueinitsimulatedgreg/electron-vueweather-app这将启动一个安装项目,其中包括一些供你选择的选项。其中一个很酷的事情是,如果你需要一些常用的插件和库,比如axios,你可以在安装过程中选择它们。几乎所有选项都很明确,但有一个问题:我决定搜索并在StackOverflow上找到了一个有用的线程。基于这个线程,它看起来像electronbuilder(electron-builder)更适合我,所以我切换到它。设置好项目后,我们需要打开应用程序所在的文件夹,运行npminstall或yarninstall,现在我们就可以开始了。了解应用结构安装完成后,可以在src中看到main和renderer两个文件夹,Electron主进程需要使用第一个。根据electron-vue的文档,Electron中运行package.json主脚本的进程称为主进程。在主进程中运行的脚本可以通过创建网页来显示GUI。在主文件夹中有两个文件:index.js和index.dev.js。第一个是你的应用程序的主文件,这是用来启动electron的文件。它也被用作webpack的生产入口文件。所有主要的流程工作都应该从这里开始。index.dev.jsis专门用于开发,因为它安装了electron-debug和vue-devtools。您可以在开发应用程序时忽略它。此外,渲染器进程需要渲染器文件夹。由于Electron使用Chromium来显示网页,所以它也使用了Chromium的多进程架构。Electron中的每个网页都在自己的进程中运行,称为渲染器进程。正如您可能注意到的那样,它是一个“正常”的Vue应用程序结构,具有资产和组件文件夹:main.js和App.vue文件。这是后者的结构:如果您尝试运行开发任务,您将得到以下结果:所以这里有一个landing-page组件也启用了devtools。现在,我们可以改变它。快速构建(脚手架)应用程序与Vuido不同,Electron支持使用HTML标签而不是原生组件构建的应用程序。因此,我们将创建一个类似于普通Web应用程序的结构,并使用CSS对其进行样式设置。请注意:我没有故意安装任何CSS框架或组件库:我想在不添加任何不同依赖项的情况下比较包大小。两个项目中唯一使用的库是axios。第一步是删除登录页面组件。然后我添加了一个简单的输入字段和一个按钮:

输入城市名称以查看当前天气

勾选
我们在数据中有一个查询属性来处理用户输入,我们将使用该查询作为参数进行API调用。为了调用API,我使用了OpenWeatherMapCurrentWeatherAPI。它提供了很多不同的信息,可以在此处查看示例JSON响应。在安装过程中,我们已将axios包含在我们的应用程序中。让我们看看src/renderer/main.js:importVuefrom'vue';从“axios”导入axios;从'./App'导入应用程序;如果(!process.env.IS_WEB)Vue.use(require('vue-electron'));Vue.http=Vue.prototype.$http=axios;Vue.config.productionTip=false;因此,我们可以在组件实例中使用axios方法作为this.$http。在这里,我们将为我们的API调用添加一个基本URL:axios.defaults.baseURL='http://api.openweathermap.org/data/2.5';现在,在App.vue中,我们将创建一个Set数据属性来显示不同的天气数据:data(){return{query:'',error:false,city:'',country:'',weatherDescription:'',temp:null,tempMin:null,Max:tempnull,humidity:null,icon:'',};},相比Vuido版本,我多加了一个属性,就是图标。API提供了天气图标,但我们不能在Vuido应用程序中使用它,因为目前不支持显示图像。我们还创建了一个获取数据的方法:methods:{showWeather(){this.$http.get(`/weather?q=${this.query}&units=metric&&appid=${API_KEY}`).then(=>{this.city=response.data.name;this.country=response.data.sys.country;this.weatherDescription=response.data.weather[0].description;this.temp=response.data.main。温度;this.tempMin=response.data.main.temp_min;this.tempMax=response.data.main.temp_max;this.humidity=response.data.main.humidity;this.icon=`http://openweathermap.org/img/w/${response.data.weather[0].icon}.png`;this.error=false;}).catch(()=>{this.error=true;this.city='';});},},并将其添加到按钮的点击回调中:并在“网络”选项卡上观察API调用:显示天气数据我们将此数据添加到模板中:我们的应用视图:太棒了,我们可以看到真实的天气状况!但是,它看起来像是从1999年开始的……让我们给它添加一些CSS魔法(事实上,很多CSS魔法)!*{边距:0;padding:0;}html,body,#app{height:100%;}#app{font-family:Arial,Helvetica,sans-serif;字体大小:16px;填充:10px;背景:rgb(212、228、239);背景:-moz-radial-gradient(center,ellipsecover,rgba(212,228,239,1)0%,rgba(134,174,204,1)100%);背景:-webkit-radial-gradient(center,ellipsecover,rgba(212,228,239,1)0%,rgba(134,174,204,1)100%);背景:径向渐变(中心椭圆,rgba(212,228,239,1)0%,rgba(134,174,204,1)100%);过滤器:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d4e4ef',endColorstr='#86aecc',GradientType=1);/*IE6-9水平梯度回退*/}.weather-input{display:flex;对齐项目:ce输入;padding:20px0;}.weather-result{text-align:center;&__main{显示:flex;对齐项目:居中;证明内容:居中;填充顶部:5px;字体大小:1.3rem;字体粗细:粗体;}&__details{显示:弹性;对齐项目:居中;证明内容:空间周围;颜色:暗灰色;}}.weather-error{颜色:红色;字体粗细:粗体;}输入{宽度:75%;大纲:无;高度:20px;字体大小:0.8rem;}按钮{显示:块;宽度:25%;高度:25px;大纲:无;边界半径:5px;:nowrap;边距:010px;font-size:0.8rem;}最后,我们有了这个完美的全功能应用程序:最后要做的是在打包之前将其大小缩小到窗口大小如果我们查看src/main/index.js文件,我们可以找到它的设置选项:mainWindow=newBrowserWindow({height:563,useContentSize:true,width:1000})我们把宽度改成450,高度改成250。应用!如果运行build:web任务,可以在dist文件夹中找到构建Web应用程序。但是让我们回到我们的桌面应用程序并运行构建任务。因此,您的构建文件夹中将有一个文件夹,根据您的平台命名(对我来说是mac),其中包含一个应用程序文件。它的大小是133Mb!这个文件对于这么小的应用程序来说太大了。此外,如果您运行它,您会注意到它的启动速度比Vuido驱动的应用程序慢。结果看起来像什么:结论优点:容易上手;很棒的文档;提供网络应用程序构建;可以通过CSS样式进行自定义。缺点:捆绑文件很大;比使用本机GUI组件构建的应用程序慢;如果您的应用需要独特的外观而您不在乎;捆绑文件大小和性能的话,Electron-vue是一个不错的选择。更新如果您的网络应用程序是使用VueCLI3构建的,您可以使用VueCLI插件ElectronBuilder将其简化为桌面应用程序。你只需要在项目根文件夹中运行以下命令:vueaddelectron-builder运行后,你将有两个额外的npm任务:serve:electron和build:electron,与桌面应用程序一起工作。