最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 看见 Electron 教程,我啪一下就进来了,很快啊!

    正文概述 掘金(何锦余)   2020-12-04   992

    朋友们好啊,我是晓黑板前端团队的何锦余,刚才有个朋友问我,“何老师,发生甚么事了?”,我说怎么回事,给我发了一个链接。我一看,喔!原来是前些天有几个年轻人,做了一个很不错的东西,写了一系列介绍 Electron 的文章。有一个说我们这个写了这么长时间了,在我们自己的晓黑板 App 上也用上了,效果很好啊,何老师你能不能用用看,看看有甚么地方可以再改进改进。

    我一开始说你们这个东西啊,不好用。还不如我自己照着官网重头写。后来这些年轻人不服气啊,给了我一个链接,我点进去,先给了个 star,想着年轻人嘛,需要鼓励一下啊。然后我就拉下了代码,装完了依赖,然后运行 npm start

    不一会儿功夫,蹦出来一个很好看的命令行页面啊。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    我看可以让我输入 open api,我就试了一下。这一试不要紧啊,啪一下,一个窗口打开了,很快啊。我一看这界面,方方面面的东西都介绍了啊。这几个年轻人乘机问我,何老师,我们这个怎么样?不比官网的介绍差吧,要不要实战一下,上手用一用。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    朋友们,我大意了啊,没有闪!但是我说,作为一个 Web 前端开发怎么让我来搞 Electron 了,所以我们老大跟我讲话,说“我们组里都决定啦,你来用一下这个 Electron Playground”,我说另请高明吧。我实在也不是谦虚,我一个 Web 前端,前段时间还在搞 Flutter,怎么就又来搞 Electron 了呢?但是呢,大家都在群里讲“大家已经讨论过了”,所以后来我就念了两句诗,叫“垂死病中惊坐起,上班摸鱼又一年”,那么所以我今天就来写了这篇文章。

    三生万物

    这几年开发,总结出了一个套路,一个东西的诞生,要经历三个步骤,我称之为“接”、“化”、“发”,下面我就一步步的去演示一下。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    根据 electron-playground 的开发步骤,我很快的就初始化好了项目。目录结构如下:

    .
    ├── index.js // 主文件
    ├── node_modules
    │   ├── @electron
    │   └── ...
    ├── package.json
    ├── src
    │   └── index.html // 页面渲染文件
    └── yarn.lock
    
      export ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
    

    执行 yarn start(提前配置好此命令对应为 electron .),即打开了如下页面。

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V1 切换到名为 V1 的 Tag 就能看到了,仓库地址点击这里。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    但是这样肯定不够啊,于是跟着教程走,我又引入了 TypeScript 和 Webpack。

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V2 切换到名为 V2 的 Tag 就能看到了,仓库地址点击这里。

    继续跟着配置了 webPreferences.preload,确保在页面运行其他脚本之前预先加载 preload.js,而 preload.js 里面给页面注入了 JSBridge,页面中可以通过调用其中的方法来实现 Electron 提供的能力。下图中点击 Get App Info 按钮获取到了应用的信息。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V3 切换到名为 V3 的 Tag 就能看到了,仓库地址点击这里。

    继续跟着 playground 走,我又配置好了 React 环境,这下意味着我们可以用 React 来编写页面,并且赋予它原生应用才具备的能力。弄到这里,我突然想到,Electron 就是桌面版的 Cordova 嘛,Electron 使用 Chromium 来渲染页面,桌面系统的优势相对于移动端来说可是太明显了,在移动端渲染 Web 页面的性能不如原生 App 的问题在桌面系统上也几乎不存在,利用 HTML/CSS/JavaScript 快速构建页面简直不要太爽。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V4 切换到名为 V4 的 Tag 就能看到了,仓库地址点击这里。

    因为每次都需要到 renderer 目录里面启动 Web 开发环境,然后还要启动 Electron 的 JavaScript 开发环境,最后还需要启动 Electron 自己的打包命令。所以简单的整合了一下,现在只需要执行 npm run dev,等待 Web 端和 Electron JavaScript 打包完成,然后点击 VSCode 下方的 Launch Program 即可(根据教程配置了 .vscode/launch.json,可以在 VSCode 下很方便的进行开发和调试工作)。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V5 切换到名为 V5 的 Tag 就能看到了,仓库地址点击这里。

    我觉得我已经做好了基础准备,接下来准备开始从 playground 中选择几个点,来做一个桌面应用出来。这里不得不夸一句,playground 中的知识点实在太多了,而且这几个年轻人还在持续的更新当中。我这里准备选择其中的“协议”和“下载管理器”两项,来做一个指定协议地址的下载工具。类似迅雷的下载地址 thunder://xxx,我决定给我的应用取名叫“掩耳”(灵感来源迅雷不及掩耳),下载地址的协议格式为 ear://xxx

    看见 Electron 教程,我啪一下就进来了,很快啊!

    接(接需求)

    先整理一下我目前想到的需要实现的需求:

    • 下载功能的实现;
    • 支持从浏览器中点击 ear://xxx 链接,可以唤起“掩耳”客户端;

    首先,还是引入 antd 来快速实现页面吧,怎么引入就按下不表了,毕竟 renderer 目录里面就是个普通的 React Web 项目,平时怎么开发现在还是怎么开发。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    很快啊,我们用 antd 就快速实现了项目的界面。

    化(化零为整,拆分组件)

    我们是怎么做的呢,基本就是吧页面拆分一下,主要分为三块:

    • 页面头部,对应 AppHeader 组件;
    • 页面内容部分,对应 AppContent 组件,以及显示的下载/已完成列表组件;
    • 下载的弹窗,对应 DownloadModal 组件;

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V6 切换到名为 V6 的 Tag 就能看到了,仓库地址点击这里。

    注册协议

    接下来开始实现功能了哈,先实现从浏览器打开 ear:// 协议的链接可以唤起应用的功能,很简单啊这个,playground 上都附上源码了,直接搬运过来。修改一下协议为 ear 即可。为了让文章看起来更充实一点,我还是附一下关键代码吧。electron-playground 这个项目真是为我们做得太多了。想试试 Electron 的同学们真是有福了。

    // 注册自定义协议
    function setCustomProtocol() {
      const agreement = 'ear' // 自定义协议名
      let isSet = false // 是否注册成功
    
      app.removeAsDefaultProtocolClient(agreement) // 每次运行都删除自定义协议 然后再重新注册
      // 开发模式下在window运行需要做兼容
      if (process.env.NODE_ENV === 'development' && process.platform === 'win32') {
        // 设置electron.exe 和 app的路径
        isSet = app.setAsDefaultProtocolClient(agreement, process.execPath, [
          path.resolve(process.argv[1]),
        ])
      } else {
        isSet = app.setAsDefaultProtocolClient(agreement)
      }
      console.log('是否注册成功', isSet)
    }
    

    看见 Electron 教程,我啪一下就进来了,很快啊!

    然后我们需要获取到这个链接,后续对它进行下载处理,当然,这部分的代码也有了,这里我就不粘贴上来了。下图中可以看到我们已经拿到了自定义链接 ear://xxx

    看见 Electron 教程,我啪一下就进来了,很快啊!

    写完这里不禁感叹,难怪牛顿说“如果我的开发效率能更高,那是因为站在了巨人的肩膀上”,如果没有这么好的开源项目,我得浪费多少时间来做这些东西。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    下载功能实现

    接下来开始实现下载功能,说出来你可能不信,Playground 中对下载这一块做了个详细的说明,甚至还附带了一个 demo!

    看了一下,基本思路就是通过 downloadURL 方法触发下载,通过监听 will-download 事件获取下载的信息。

    // 触发下载
    win.webContents.downloadURL(url)
    
    // 监听 will-download
    // downloadItem 会触发 updated 和 done 事件,此时可以通过 downloadItem 上的 getTotalBytes、getReceviedBytes 等方法获取下载对象的基础信息
    session.defaultSession.on('will-download', (event, downloadItem, webContents) => {})
    

    大致的实现了一下,最终的效果如下,最基础的下载功能已经实现,由于我发现 Electron Playground 的关于下载这一块的功能实现的过于完善,所以我就不再做多余的工作了,有兴趣的同学直接去看看这群年轻人的代码就好了。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V7 切换到名为 V7 的 Tag 就能看到了,仓库地址点击这里。

    发(发散思维,实现我们的小彩蛋)

    最后,其实文章到这里已经差不多了,这其实是我第一次接触 Electron,之前仅仅只会这个单词的拼写,然后跟着我们的小伙伴们写的教程 Electron Playground,很顺利的就搭建了一个 Electron App,我还是很开心的,希望感兴趣的同学也可以去学习一波。

    然而,前面说了要实现 ear:// 协议地址的下载,我还是想做一下,好给这个小 demo 画上一个圆满的句号。接下来说一下我的实现思路,因为这里的下载实际上是 Chromium 提供的能力,所以本质上还是走的 http(s):// 协议。所以我想,对 http(s):// 地址做一个对称加密成 ear://,然后下载的时候再解析回 ear:// 就好了。为什么要做这看起来脱裤子放屁的事情呢?实际上是为了让文章内容看起来丰富一些。为什么要做这件事情呢?因为想必各位在微信、微博上都见过屏蔽链接的事情,如果我们不使用传统的 http(s):// 链接,自然就不会被和谐了。

    一顿操作,最终我们成功的在浏览器端输入 ear:// 链接并成功的下载了。

    看见 Electron 教程,我啪一下就进来了,很快啊!

    对了,代码我上传到了 GitHub 上,如果你不嫌烦的话,可以克隆代码到本地,然后执行 git checkout V8 切换到名为 V8 的 Tag 就能看到了,仓库地址点击这里。

    好啦,如果大家对 Electron 感兴趣的话,可以试一试在自己的机器上跑一下喔,送给大家一个链接不是彩蛋用来测试。ear://VWSpnQ90LVlbcD+uABt8VHhKBSgM06XPccnLo5zVSgDJd67zNGf1afwD5pmMdt/x,祝大家学习快乐,玩得开心。

    再见?

    对了,我们已经有了一些介绍 Electron 的精美文章,都是满满的干货的那种,欢迎大家点击关注 Electron Playground 专栏,我们的开源项目地址在这里,点 star,不迷路。

    最后,我们是好未来·晓黑板前端团队。下次再见。?


    起源地下载网 » 看见 Electron 教程,我啪一下就进来了,很快啊!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元