electron 打包_Vue3+Electron整合方式

04eafcebf2310b81f0e892e0934bf136.png

教程源码:

nofacer/vue3-electron​github.com
8c71fff2e6d9fcd9eb9c125e3ec669d9.png

之前写过一篇文章Vue结合Electron构建跨平台应用(TDD)。当时的方法后来发现了一个问题,就是打包后的应用拿到其他机子上没法用,原因在于index.html的地址是个绝对路径,在打包的时候就被固定下来了。

9b18cfe1b3f4bae8af41f6c26c488e77.png

在查阅了许多资料后发现之前将二者结合的方法不是很有效(开发和生产环境不一致等),正好Vue3也进入beta阶段了,因此想借着这个机会重新梳理一下这个话题。打算不借助各种快捷生成项目的cli从零将二者有机结合起来,这样可以加深对各种构建工具的了解。

涉及内容:

  • Vue
  • Electron
  • Webpack
  • Scss

安装Webpack

b53ccd438015dfcf3bc0e20fa4a84a36.png

新建./index.html

b836f206f98e013cf585094b7e321c65.png

这里通过script src的方式导入了lodash,为了后面测试webpack能否正常工作。 新建./index.js

63fddf4cb28037fdf3703afd2587816d.png

用浏览器打开index.html,不出意外应该能看到Hello webpack页面。 运行npm install -D lodash在本地安装lodash。修改./index.js,通过包引入lodash。

3091e0c06ca3bb74a1b91ed118662a0f.png

新建./webpack.config.js来配置webpack的行为。

68fb82ce7cc3fc52c1b64616732974d8.png

运行npx webpack,正常情况应该在./dist/bundle.js中有我们所有的js内容。 将./index.html的内容修改为

08654732e075aab2749daea8d81ad4b2.png

在浏览器中打开看到的应该是和之前一样的界面。说明webpack正常工作了。

安装Vue3

b4e8f895cde15ae62980d2adf0fbc610.png
vue-loader is a loader for webpack that allows you to author Vue components in a format called Single-File Components (SFCs)

修改./index.js,新建一个vue应用。

5f4e86fe1f2aad15c1b5391fa46e4b52.png

新建./App.vue

a1662833c5757cf61913bae8cf491db8.png

再新建个src/components/HelloWorld.vue

582aa5880ecb52390fda7c5ec68f2475.png

最后再在./index.html<body>中加一个<div id="app"></div>

74c0fe0b90d559cf93989ee5e793a60e.png

./node_modules/.bin/webpack --config webpack.config.js后在浏览器中打开index.html,应该可以看到“Welcome to Your Vue.js App”几个大字。

引入样式(Scss)

到目前为止,我们的应用还没有设定什么样式,接下来我们看看样式怎么被一起打包。

https://vue-loader.vuejs.org/guide/pre-processors.html

src/components/HelloWorld.vue的末尾加上一点样式

6807ec403165913bdda65037590103dd.png

这时候build是会报错的

You may need an additional loader to handle the result of these loaders.
| 
> $nav-color: #F90;
| h1{
|   color: $nav-color;

我们需要安装一点东西npm install -D style-loader sass-loader node-sass css-loader。之后修改./webpack.config.js

44ed9336473a5e7c168bdaed5882db97.png

build后打开网页,文字应该变成了橙色。这种方式是通过single-file component的形式添加的样式,接下来我们再通过import external scss文件的形式添加样式。新建./src/style/common.scss

31c63851bc35a228b38400886ce7719e.png

./index.js里加入scss文件

cfeefdc4178253e5000c12f5f0e95d4e.png

到目前为止,最终的网页看起来应该像这样:

66b24f8a83a138a92fb544e80258959b.png

引入图片资源

图片也可以被当成模块利用webpack打包,后期管理资源路径比较方便。修改HelloWorld.vue的template

27c064517f3915682f17f981d7f6ff15.png

在webpack.config的rules中加上

ced4b3b40b52bcab7d160bb97b91726b.png

Babel

因为我们用的都是最新的Electron,浏览器内核都比较新,新的JS特性也都支持,就不安装Babel了。

安装Electron

重头戏终于来了。npm i -D electron@latest安装最新的electron。新建./main.js作为electron的入口文件。

53d5ab2b5d24920e155497d053ca4ee9.png

由于增加了main文件作为Electron的入口,再加上index文件作为Vue的入口,现在一共两个入口,需要修改entry配置。同时,我们需要在配置中指定打包应用类型,将target设置为electron-renderer。修改后如下:

d8d3d457ad0d7f5edd26f31296be6ead.png

修改package.json中的"main": "./dist/main.js"。scripts中加一个"start": "electron ."npm run buildnpm run start应该可以看到electron app成功启动。

Publish配置

如果要打包应用还有些东西要调整。安装npm i -D electron-builder。 在package.json中加入

70108b4b777de136629aa6d68be0026a.png
Then you can run yarn dist (to package in a distributable format (e.g. dmg, windows installer, deb package)) or yarn pack (only generates the package directory without really packaging it. This is useful for testing purposes).

为了确保所有依赖都匹配electron的版本,再在package.json中加入"postinstall": "electron-builder install-app-deps" 增加build的配置,将dist文件夹和index.html包含进去,打包输出路径为package。最终的package.json应该长这样

0d3fb68a36b33602f00b46a1fd850402.png

运行npm run dist看看能不能打包成功。

a952cc862e4ed82c1bf86a142eeb3d40.png

微调下样式,最终的效果应该是这样

5cb5c684a061bfdcbcf90507864f5fef.png

后话

目前的配置只适合作为Demo,更详细的配置请移步Github。顺便记得点个 哦~

nofacer/vue3-electron​github.com
8c71fff2e6d9fcd9eb9c125e3ec669d9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux按照时间顺序列出文件

按照递增时间顺序列出所有文件 ls -ltr -l表示列出长串数据&#xff0c;-t表示按照时间顺序&#xff0c;-r表示将排序的结果反向输出 按照时间递减的顺序列出所有文件 ls -lt 转载于:https://www.cnblogs.com/yongjieShi/p/9395932.html

RestKit

2019独角兽企业重金招聘Python工程师标准>>> Restkit 是一个开源的 objective-c 框架&#xff0c;允许在 iOS 和 Mac OS X 的 Objective-C 中与 RESTful Web 服务进行交互&#xff0c;包含简单的 HTTP request/response API &#xff0c;带有强大的对象映射系统用于…

全国计算机等级考试题库二级C操作题100套(第41套)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

2012年终总结 二

2019独角兽企业重金招聘Python工程师标准>>> 接上文。。。 经过一些搜索和了解之后&#xff0c;最后选定了我现在这个公司。现在&#xff0c;至少我没有感觉到我选错。 刚近公司&#xff0c;进行了新人的入职培训1天&#xff0c;这个主要是了解公司状况。而后&…

python语言包括哪些实现_Python语言基础考察点:python语言基础常见考题(一)

一、python是静态还是动态类型&#xff1f;是强类型还是弱类型&#xff1f; 1、动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2、动态还是静态指的是编译期还是运行期确定类型 3、强类型指的是不会发生隐式类型转换 若类型语言强类型语言4、python作为后端语言优缺点 …

由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?...

从用户的视角来感受一个开源项目的成长&#xff0c;是我们推出「开发者说」专栏的初衷&#xff0c;即在开发者进行开源项目选型时&#xff0c;提供更为立体的项目信息。专栏所有内容均来自作者原创/投稿&#xff0c;本文是「开发者说」的第9篇&#xff0c;作者郑扬勇&#xff0…

Java 多线程(三) 线程的生命周期及优先级

Java 多线程&#xff08;三&#xff09; 线程的生命周期及优先级 线程的生命周期 线程的生命周期&#xff1a;一个线程从创建到消亡的过程。 如下图&#xff0c;表示线程生命周期中的各个状态&#xff1a; 线程的生命周期可以分为四个状态&#xff1a; 1.创建状态&#xff1a; …

eclipse 导入maven项目_手把手的Spring Boot Web 项目教程,Hello Spring Boot

在开始之前&#xff0c;我们需要去创建一个SpringBoot项目&#xff0c;大家可以去 http://start.spring.io/ 这个网站生成一个项目。如图&#xff0c;这边可以对SpringBoot项目进行详细设置&#xff1a;下面这个web一定要勾选&#xff1a;SpringBoot版本号选择1.5.10全部设置好…

ASP.Net中实现中英文复合检索文本框

前段时间&#xff0c;写一个用户部门的管理页面&#xff0c;需要对后台获取的用户数据实现英汉检索功能。  同时&#xff0c;选定一个选项之后&#xff0c;需要触发事件与后台交互&#xff0c;将该用户所在的部门显示到页面右边的ListBox控件中。 一、Dojo的FilteringSelect组…

sklearn 安装_初识sklearn

我的主业是互联网运营&#xff0c;业余的python爱好者&#xff0c;学习python已经快两年&#xff0c;主攻网络爬虫与数据分析&#xff0c;爬虫能使用代理ip、打码平台、OCR识别、基本的js逆向处理反爬&#xff1b;数据分析主要使用pandas与pyecharts进行可视化&#xff0c;我的…

[工具库]JOJSONBuilder工具类——一键把多个bean对象数据转换为JSON格式数据

本人大四即将毕业的准程序员&#xff08;JavaSE、JavaEE、android等&#xff09;一枚&#xff0c;小项目也做过一点&#xff0c;于是乎一时兴起就写了一些工具。 我会在本博客中陆续发布一些平时可能会用到的工具。 代码质量可能不是很好&#xff0c;大家多担待&#xff01; 代…

mysql long类型_怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!...

点击上方蓝色“冰河技术”&#xff0c;关注并选择“设为星标”持之以恒&#xff0c;贵在坚持&#xff0c;每天进步一点点&#xff01;作者个人研发的在高并发场景下&#xff0c;提供的简单、稳定、可扩展的延迟消息队列框架&#xff0c;具有精准的定时任务和延迟队列处理功能。…

状压dp之二之三 炮兵阵地/玉米田 By cellur925

一、简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares…

LockSupport的源码实现原理以及应用

一、为什么使用LockSupport类 如果只是LockSupport在使用起来比Object的wait/notify简单&#xff0c; 那还真没必要专门讲解下LockSupport。最主要的是灵活性。 上边的例子代码中&#xff0c;主线程调用了Thread.sleep(1000)方法来等待线程A计算完成进入wait状态。如果去掉Thr…

python3 爬虫 requests安装_BOSS直聘招聘信息获取之爬虫工具分析

点击蓝色“不太灵光的程序员”关注我哟加个“星标”&#xff0c;每天上午 09:30&#xff0c;干货推送&#xff01;文中使用的组件库仅限于Python语言&#xff0c;由于最近收到一些同学的留言说&#xff0c;按照网上的教程一步一步的学习&#xff0c;却频繁的出现报错&#xff0…

假期周进度总计(四)

本周学习利用OEM工具创建删除表以及对表内数据进行增删改查的操作 一切均通过此工具进行&#xff0c;然后还学到了用SQL *Plus进行相应操作 本周每天4.5个小时&#xff0c;出现的错误就是点击的误操作&#xff0c;可以改正&#xff0c;下周进一步学习Oracle基本操作转载于:http…

Java集合框架(3)

Map(和Collection<E>一样都是集合框架的顶层接口) |--Hashtable:底层是哈希表数据结构&#xff0c;不可以用null对象作为键或值。它是线程同步的。 |--HashMap&#xff1a;底层是哈希表。允许使用null键null值&#xff0c;该集合是不同步的&#xff0c;效率高&#xff0c…

php函数从数组中取出指定的数目,PHP数组函数

1.array_rand()从数组中随机取出一个或多个元素(返回值是&#xff1a;随机元素的键)$arr[js,css,25,php,30];printf(%s,print_r($arr,true));//随机去2个元素$resarray_rand($arr,2);printf(%s,print_r($res,true));2.array_replace()使用后面数组元素相同 key 的值替换 array1…

存储过程 not supported yet_让我们来看看+Redis如何存储和计算一亿用户的活跃度

1前段时间&#xff0c;在网上看到一道面试题&#xff1a;如何用redis存储统计1亿用户一年的登陆情况&#xff0c;并快速检索任意时间窗口内的活跃用户数量。觉得很有意思&#xff0c;就仔细想了下 。并做了一系列实验&#xff0c;自己模拟了下 。还是有点收获的&#xff0c;现整…

HBase查询优化

1.概述 HBase是一个实时的非关系型数据库&#xff0c;用来存储海量数据。但是&#xff0c;在实际使用场景中&#xff0c;在使用HBase API查询HBase中的数据时&#xff0c;有时会发现数据查询会很慢。本篇博客将从客户端优化和服务端优化两个方面来介绍&#xff0c;如何提高查询…