Electron 结合WEB项目制作桌面APP之二 ---- electron与web的结合开发体验

【Electron】使用Electron将web项目打包成桌面应用程序 执行打包命令: electron-packager . app --win --out sysApp --arch=x64 --electron-version 1.4.14 --overwrite --ignore=node_modules 阅读详情

引言

开始尝试用electron搭建了一个hello world,体验还是挺不错的,对于一个web开发者来说,能把自己的开发成果做成一个桌面app,那将是一步巨大的跨越
藉此,再深入学习后,开始了第二个“hello world”

目标

  1. 将百度首页做成我的app首页
  2. 做一个简易的视频播放器

千里之行始于足下,electron还没完全学会,不妨碍我去使用它

  1. 下载electron官方推荐的快速模板: 链接

        git clone https://github.com/electron/electron-quick-start.git
    
        cd electron-quick-start
        # 安装依赖
        yarn install
        # 安装打包工具
        yarn add electron-packager -D
        # 测试下
        yarn run start
        # 成功跑起来了,并且出现了官方的默认首页文本
  2. 开始折腾这个快速模板

    • 修改package.json,将模板变成我们自己的项目
          // 修改项目名称
          "name": "百度",
          // 在script中添加打包命令
          "scripts": {
              "start": "electron .",
              "package": "electron-packager . baidu --platform=win32 --arch=x64 --out=./dist --asar --app-version=2.0.1 --icon=lte_logo.ico --ignore=\"(dist|src|docs|.gitignore|LICENSE|README.md|webpack.config.js|node_modules)\""
          },
  3. 百度一下啦~

    • 第一种方案,修改main.js,将windows指向的files协议修改为https协议,将文件修改为www.baidu.com

          mainWindow.loadURL(url.format({
              // pathname: path.join(__dirname, 'index.html'),
              // protocol: 'file:',
              pathname: '//www.baidu.com',
              protocol: 'https:',
              slashes: true
          }))
    • 测试一下:大功告成

  4. 打包一下,打包后的文件自动存放到dist文件夹

        yarn run package
  5. 至此,百度首页成功被嵌入到了electronApp中

同上面的方法,我们来制作自己的视频播放器

  1. 修改index.html

        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <title>video player</title>
            <style type="text/css">
            *{
                margin: 0;
                padding: 0;
                font-size: 14px;
                font-family: "Microsoft YaHei";
            }
            .clearfix:before, .clearfix:after {
                display: table;
                content: '';
            }
            .clearfix:after {
                clear: both;
            }
            html, body {
                width: 100%;
                height: 100%;
                overflow: hidden;
            }
            /* 修改input的样式 start */
            input {
                /* 去掉默认样式 */
                -web-kit-appearance:none;
                -moz-appearance: none;
                /* 边框 圆角 高度 字体 颜色 */
                font-size:1.0em;
                height:2.7em;
                border-radius:4px;
                border:1px solid #c8cccf;
                color:#c7cace;
                /* 去掉输入框的轮廓 */
                outline:0;
            }
            /* 修改input的样式 end */
            .video-playper-body {
                width: 100%;
                height: 100%;
                background-color: #111;
                position: relative;
            }
            .video-window {
                width: 100%;
                height: 100%;
            }
            .video-list {
                width: 175px;
                height: 100%;
                background-color: #20A0ff;
                opacity: .7;
                position: absolute;
                right: 0;
                top: 0;
            }
            .video-item {
                line-height: 1.6em;
                margin-top: .3em;
                margin-left: 1em;
                cursor: pointer;
                list-style: none;
            }
            .list-close, .list-open {
                width: 1.2em;
                height: 2em;
                line-height: 2em;
                position: absolute;
                font-size: 1.5em;
                color: #20a0ff;
                font-weight: bold;
                top: 45%;
                right: 0;
                cursor: pointer;
            }
            .list-close {
                right: 165px;
            }
            .hidden-list {
                /* display: none; */
                visibility: hidden;
            }
            .sreach-video {
                width: 100%;
            }
            </style>
        </head>
        <body class="video-playper-body clearfix">
            <video id="videoWindow" autoplay controls class="video-window"></video>
            <ur class="video-list" id="videoList">
            <input type="text" id="sreachVideo" class="sreach-video" onkeyup="sreach()" placeholder="请输入影片名或关键字">
            <!-- li -->
            </ur>
            <div onclick="openOrClose()" id="coBtn" class="list-close list-open">》</div>
            <script src="./ajax.js"></script>
            <script type="text/javascript">
            let videoWindow = document.getElementById('videoWindow')
            videoWindow.src = 'http://example.com?video=2423313213123'  // 示例视频
    
            console.log('Ajax: ', Ajax)
            // init
            window.onload = function () {
                initVideoList()
            }
    
            function initVideoList() {
                Ajax.get('./video.json', (res) => {
                console.log('res: ', JSON.parse(res))
                JSON.parse(res).map((v) => {
                    let li = document.createElement('li')
                    li.className = 'video-item'
                    li.setAttribute('onclick', `getVideoItem('${v.desc}')`)
                    // li.onclick = `getVideoItem(${v.desc})`
                    li.innerHTML = v.desc
                    document.getElementById('videoList').appendChild(li)
                })
                })
            }
    
            function getVideoItem(n) {
                Ajax.get('./video.json', (res) => {
                JSON.parse(res).map((v) => {
                    if (n == v.desc) {
                    videoWindow.src = v.url
                    console.log(v.url)
                    }
                })
                })
            }
    
            // 打开或者关闭列表
            function openOrClose() {
                let coBtn = document.getElementById('coBtn')
                // coBtn.className = 
                console.log('coBtn: ', coBtn)
                console.log(coBtn.getAttribute('class').indexOf('list-close') > -1)
                if (coBtn.getAttribute('class').indexOf('list-close') > -1) {
                coBtn.innerHTML = '《'
                coBtn.classList.remove('list-close')
                document.getElementById('videoList').classList.add('hidden-list')
                } else {
                coBtn.innerHTML = '》'
                coBtn.classList.add('list-close')
                document.getElementById('videoList').classList.remove('hidden-list')
                }
            }
    
            // 搜索
            const { dialog } = require('electron').remote
            function sreach () {
                let sreachVideo = document.getElementById('sreachVideo')
                if (event.keyCode == 13) {
                console.log('输入的内容: ', sreachVideo.value)
                console.log('Enter')
                dialog.showMessageBox({
                    type: 'info',
                    message: `你的查询字段是:${sreachVideo.value}。\nBut,没人告诉你,这个功能不可用吗?��`
                })
                }
            }
            </script>
        </body>
        </html>
    1. 附上ajax.js和video.json的文件
        var Ajax={
            get: function(url, fn, err) {
                var xhr = new XMLHttpRequest();  // XMLHttpRequest对象用于在后台与服务器交换数据          
                xhr.open('GET', url, true);
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) { // readyState == 4说明请求已完成
                        fn.call(this, xhr.responseText);  //从服务器获得数据
                    }
                };
                xhr.send();
            },
            post: function (url, data, fn, err) {         // datat应为'a=a1&b=b1'这种字符串格式,在jq里如果data为对象会自动将对象转成这种字符串格式
                var xhr = new XMLHttpRequest();
                xhr.open("POST", url, true);
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  // 添加http头,发送信息至服务器时内容编码类型
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {  // 304未修改
                        fn.call(this, xhr.responseText);
                    } else {
                        err()
                    }
                };
                xhr.send(data);
            }
        }
        [
            {
                "url": "http://113.105.167.160/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/x0200a1uksl.p201.1.mp4?vkey=4AFB455CCB1EFB17914BB0610E27D81DF9F827F6219D7808BE5430E84F647D9D35E631E8B0AD371939B9C77FEA1544CC24C0E94E854433A03B578760ADC881EC675619ED12FDFC57536C3D9463B394A44D7A377C641B95C80F622874B026B1E475497AF5D143AE7CE0E12B6E1E48B22E331D35739A8DF55D&platform=10201&sdtfrom=&fmt=shd&level=0&locid=1fc86f35-8330-493b-b7ba-a42a699d3595&size=5122470&ocid=2507543980",
                "desc": "视频1"
            }, {
                "url": "http://183.61.62.141/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/k02001m96jf.p201.1.mp4?vkey=37A35A75FB70EAC387A467C14CFD9CA3C82B8B86F82090D503B43902BBE92CBF59BA80C5E63ABB55841069EE7E170F04212F2EE377E5947A6015317ABDCCC5154C549EE576FB216276F4C772E89CCC0DB0F439529033E8F5DFDC3A83B5B5D1FD25FFBCA60A4D65129CBC7E0B866660F91C6D8386BBD48A95&platform=10201&sdtfrom=&fmt=shd&level=0",
                "desc": "视频2"
            }, {
                "url": "http://183.61.62.147/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/k02001m96jf.p201.1.mp4?vkey=37A35A75FB70EAC387A467C14CFD9CA3C82B8B86F82090D503B43902BBE92CBF59BA80C5E63ABB55841069EE7E170F04212F2EE377E5947A6015317ABDCCC5154C549EE576FB216276F4C772E89CCC0DB0F439529033E8F5DFDC3A83B5B5D1FD25FFBCA60A4D65129CBC7E0B866660F91C6D8386BBD48A95&platform=10201&sdtfrom=&fmt=shd&level=0&locid=5fbac1ed-7973-42ed-9330-e018d3863cfa&size=2566398&ocid=194322348",
                "desc": "视频3"
            }, {
                "url": "http://113.105.167.144/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/p02008fn39e.p201.1.mp4?vkey=66EC1B74D9779448BC29D12B0CCFD258B9CB5F9E19BE98B80429876E63942AE2F8CE6D9BC3A4359F6639742D3D91AF41F87643DE2FB533B3029DF19C0859FA7D1449F77701D9C226C73B70A08D5FAC68BA4A436DA87419CF9DE7E687A15BA9C1EB082D4B2D404D2B7C4DFF551BDC5384529C05F59E6D8717&platform=10201&sdtfrom=&fmt=shd&level=0&locid=1636e051-0f90-470b-b2fc-fc01ec538834&size=2543069&ocid=2390103468",
                "desc": "视频4"
            }, {
                "url": "http://113.105.167.142/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/p02008fn39e.p201.1.mp4?vkey=66EC1B74D9779448BC29D12B0CCFD258B9CB5F9E19BE98B80429876E63942AE2F8CE6D9BC3A4359F6639742D3D91AF41F87643DE2FB533B3029DF19C0859FA7D1449F77701D9C226C73B70A08D5FAC68BA4A436DA87419CF9DE7E687A15BA9C1EB082D4B2D404D2B7C4DFF551BDC5384529C05F59E6D8717&platform=10201&sdtfrom=&fmt=shd&level=0",
                "desc": "视频5"
            }, {
                "url": "http://113.105.167.144/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/p02008fn39e.p201.1.mp4?vkey=66EC1B74D9779448BC29D12B0CCFD258B9CB5F9E19BE98B80429876E63942AE2F8CE6D9BC3A4359F6639742D3D91AF41F87643DE2FB533B3029DF19C0859FA7D1449F77701D9C226C73B70A08D5FAC68BA4A436DA87419CF9DE7E687A15BA9C1EB082D4B2D404D2B7C4DFF551BDC5384529C05F59E6D8717&platform=10201&sdtfrom=&fmt=shd&level=0&locid=1636e051-0f90-470b-b2fc-fc01ec538834&size=2543069&ocid=2390103468",
                "desc": "视频6"
            }, {
                "url": "http://113.105.167.144/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/p02008fn39e.p201.1.mp4?vkey=66EC1B74D9779448BC29D12B0CCFD258B9CB5F9E19BE98B80429876E63942AE2F8CE6D9BC3A4359F6639742D3D91AF41F87643DE2FB533B3029DF19C0859FA7D1449F77701D9C226C73B70A08D5FAC68BA4A436DA87419CF9DE7E687A15BA9C1EB082D4B2D404D2B7C4DFF551BDC5384529C05F59E6D8717&platform=10201&sdtfrom=&fmt=shd&level=0&locid=1636e051-0f90-470b-b2fc-fc01ec538834&size=2543069&ocid=2390103468",
                "desc": "视频7"
            }, {
                "url": "http://113.105.167.149/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/x0200a1uksl.p201.1.mp4?vkey=4AFB455CCB1EFB17914BB0610E27D81DF9F827F6219D7808BE5430E84F647D9D35E631E8B0AD371939B9C77FEA1544CC24C0E94E854433A03B578760ADC881EC675619ED12FDFC57536C3D9463B394A44D7A377C641B95C80F622874B026B1E475497AF5D143AE7CE0E12B6E1E48B22E331D35739A8DF55D&platform=10201&sdtfrom=&fmt=shd&level=0",
                "desc": "视频8"
            }, {
                "url": "http://113.105.167.160/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/x0200a1uksl.p201.1.mp4?vkey=4AFB455CCB1EFB17914BB0610E27D81DF9F827F6219D7808BE5430E84F647D9D35E631E8B0AD371939B9C77FEA1544CC24C0E94E854433A03B578760ADC881EC675619ED12FDFC57536C3D9463B394A44D7A377C641B95C80F622874B026B1E475497AF5D143AE7CE0E12B6E1E48B22E331D35739A8DF55D&platform=10201&sdtfrom=&fmt=shd&level=0&locid=1fc86f35-8330-493b-b7ba-a42a699d3595&size=5122470&ocid=2507543980",
                "desc": "视频9"
            }, {
                "url": "http://113.105.167.160/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/x0200a1uksl.p201.1.mp4?vkey=4AFB455CCB1EFB17914BB0610E27D81DF9F827F6219D7808BE5430E84F647D9D35E631E8B0AD371939B9C77FEA1544CC24C0E94E854433A03B578760ADC881EC675619ED12FDFC57536C3D9463B394A44D7A377C641B95C80F622874B026B1E475497AF5D143AE7CE0E12B6E1E48B22E331D35739A8DF55D&platform=10201&sdtfrom=&fmt=shd&level=0&locid=1fc86f35-8330-493b-b7ba-a42a699d3595&size=5122470&ocid=2507543980",
                "desc": "视频10"
            }, {
                "url": "http://113.105.167.145/vlive.qqvideo.tc.qq.com/Ao3DQunwAFEAGzpCT3N1ajLG05hAp-kGv1jdNpHcUR4w/a02000zycfk.p201.1.mp4?vkey=70FA12E0C4BDE12A5DCCDF8164A39FA04B97EFF1F63A1CDB2404868D854DA78CDA8CDD3DC65CAF646F12430652918AE419844CF008CD83790467FF65562C929A70DF3843C8C324AB3940B719D1C5A574B0C58067C316128BC9E3934F50384DD9EEC615D275ACC77557CA4B3F34A9CA614D59C0F0619C6C63&platform=10201&sdtfrom=&fmt=shd&level=0",
                "desc": "视频11"
            }
        ]
  2. yarn run start 跑一下咯 video-player

至此,第一个有自己功能的桌面app算是开发完毕,那就打包吧

  1. 运行打包命令yarn run package, 结果如下

        $ npm run package
    
        > my-video-player@1.0.0 package D:\My documents\electron\video_player
        > electron-packager . rfsniffer --platform=win32 --arch=x64 --out=./dist --asar --app-version=2.0.1 --ignore="(dist|src|docs|.gitignore|LICENSE|README.md|webpack.config.js)"
    
        Packaging app for platform win32 x64 using electron v1.8.4
        Wrote new app to dist\rfsniffer-win32-x64
    
  2. 测试下dist/video-player-win32-x64下的 video-player.exe video-player.exe

  3. 我要发送给朋友装装逼@_@!

    • 安装winRar软件,32位就可以(朋友电脑可能比较旧,不支持64位,哈哈哈)
    • 右键添加压缩文件,选择添加自解压文件,
    • 在高级选项中,设置自解压目录和桌面快捷方式,
    • 最后点击确定完成打包,具体的见下面动图展示
    • 动图展示
  4. Now, go and show off your friends!

探索 Electron:将 Web 技术带入桌面应用 Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能来构建功能强大且跨平台的应用程序,这对于提升开发效率和应用程序的快速交付具有重要意义。 阅读详情

相关推荐

Electron打包Web程序,部署web端桌面程序(很简单!)

"packager":"electron-packager ./ ISCS --platform=win32 --arch=x64 --electron-version=1.8.4 --out --overwrite" //新增。// 想要取消窗口对象的引用, 如果你的应用支持多窗口,你需要将所有的窗口对象存储到一个数组中,然后在这里删除想对应的元素。// "test": "echo \"Error: no test specified\" && exit 1" //修改前。感觉挺好玩,随手记录下。

qq_62291805的博客 2743

【干货】零基础30分钟让你拥有一个完整属于自己的短视频APP系统

导入.MD文档的 但是不知道为什么。。。就是转存不了图片~ 一、附言: 【干货】30分钟让你拥有一个完整属于自己的短视频APP系统-附带系统 首先以下内容步骤只要你按照步骤来 绝对能完美搭建起来的,零基础小白都可以,内容非常细。 首先第一步我们下载源码 YYC松鼠V1.5版本,附件我已经发了这里 直接可以下载,然后购买服务器和域名。 站长之家也可以直接下载到,很多地方可以下载能百度搜到。 下面我以...

一颗优雅草科技-央千澈的优快云博客~只想无穷无尽的学习~作息早8-晚8 56万+

Electron与Vue结合开发桌面应用的架构设计与实践

electron与vue结合开发桌面应用的架构设计,electron+vue分离架构设计

binbin_youyou的博客 2160

Python基础

Python基础之理论**Python2 与 3的区别****进程 线程 协程**进程进程通信进程说明进程池线程常用方法join()方法isAlive()方法getName()方法setDaemon()方法线程锁线程特性线程池进程和线程的区别协程协程优点协程缺点协程为何能处理并发**Greenlet****Gevent**猴子补丁说明**GIL全局解释器锁**有了GiL锁为何需要线程锁GiL有什么影响排他锁避免GiL带来的影响方法一方法二**迭代器**迭代器的定义迭代器的2方法可迭代对象小结生成器工作原理生

墨茶Official 愿你在二次元有吃不完的草莓 饺子(ㄒoㄒ) 4万+

Electron----桌面应用开发框架

Electron 是一个开源框架,旨在使用 Web 技术(如 HTML、CSS 和 JavaScript)开发跨平台的桌面应用。它结合了 Chromium 和 Node.js,使开发者能够构建具有原生应用体验的桌面应用程序,同时使用熟悉的 Web 开发工具和技术。它的灵活性、强大的功能和良好的社区支持使得它成为构建现代桌面应用的热门选择。:负责管理应用的生命周期、创建和管理窗口以及处理系统级别的 API 请求。:提供了简化的工具链来创建、开发、打包和发布 Electron 应用。类来创建和管理应用窗口。

weixin_41978174的博客 8466

跨平台桌面应用开发:解锁 Electron 与 shadcn/ui 的潜力

Electron 源自 GitHub 这个充满创新活力的开源温床,它就像一座神奇的桥梁,无缝连接 Web 页面与桌面应用的两个天地。开发者凭借前端开发技能,就能让平凡的 HTML 页面摇身一变,成为具备强大本地交互功能的桌面应用。想象一下,那些原本只能在浏览器中运行的网页,通过 Electron 的 “魔力”,瞬间拥有了与操作系统深度交互的本领,能够轻松穿梭于本地文件系统,精准调用系统通知,甚至与硬件设备亲密 “对话”。

黄明基的博客 1291

Vue与Electron融合之道:从Web App到桌面App的华丽转身

Vue 与 Electron 的融合,为 Web 开发者打开了通往桌面应用世界的大门。凭借共享的技术栈、高效的开发流程以及丰富的桌面特性,Vue 应用可以轻松实现从 Web App 到桌面 App 的华丽转身。遵循本文提供的实战步骤与代码示例,您将能快速构建出兼具 Web 灵活性与桌面强大功能的现代化桌面应用程序,为用户提供卓越的跨平台体验。

与墨的编程成长历程 4607

Electron与其他桌面开发框架的优势对比

开发效率高熟悉的技术栈丰富的生态系统快速迭代跨平台能力强一次编写,多平台运行统一的用户体验社区支持活跃的开发者社区丰富的学习资源大量可用组件。

q68686的博客 1337

用Electron将web网页程序包装成桌面应用

用Electron将web网页程序包装成桌面应用 前提 web 端页面,真的太容易一不小心关掉了,或者,标签页比较多的时候不太容易找到,所以决定快速包装一个 认识electron electron快速入门 搭建electron项目 第一步 创建项目,下载依赖 mkdir my-electron-app && cd my-electron-app npm init npm install --save-dev electron (devDependencies:只在开发环境中使用

知识点沉淀包括不限于前端 7891

跨平台开发神器Electron:用Web技术打造桌面应用的终极解决方案

Electron 是一个基于 Node.js 和 Chromium 的开源框架,允许开发者使用 JavaScript、HTML、CSS 等 Web 技术构建跨平台桌面应用。其核心优势在于跨平台能力,支持 macOS、Windows 和 Linux 三大操作系统,实现“一次开发,多端部署”。Electron 的技术架构结合了 Chromium 引擎和 Node.js,提供了丰富的 API 和工具链,支持窗口管理、系统集成、硬件访问等功能。其生态活跃,拥有强大的社区支持和开发工具,如 Electron Fidd

wylee的博客 1295

【React实战】create-react-app整合electron打造第一个桌面app

Electron 是一个跨平台的、基于 Web 前端技术的桌面 GUI 应用程序开发框架。使用 Web 前端技术来开发一个桌面 GUI 程序是一件多么炫酷的事情,你可以使用 HTML、CSS 来绘制界面和控制布局,使用 JavaScript 来控制用户行为和业务逻辑,使用 Node.js 来通信、处理音频视频等,几乎所有的 Web 前端技术和框架(jQuery、Vue、React、Angular 等)都可以应用到桌面 GUI 开发中。

Coding and studying 1593

electron c#桌面开发_使用 Electron + Vue 开发 MacOS APP

如果你想研发一款 MAC APP or Windows APP,并且你也是一个前端工程师的话,那么这篇文章将很适合你——它将介绍一款工具,用于使用 Vue 开发 Electron 项目——它们最终可以编译为跨平台的桌面端 APP。一、著名的 Electron如果你是一个程序员,不管是前端程序员,还是 Python 程序员。你都一定使用过这两种工具:VSCode 和 Github Desktop。你...

weixin_39533280的博客 642

Electron与Vue3结合开发桌面应用教程

Electron是一个由GitHub开发的开源框架,允许开发者使用JavaScript、HTML和CSS等Web技术来创建跨平台的桌面应用程序。这个框架通过将Chromium和Node.js集成到一个单一的应用程序中,使得开发者能够利用Web技术的强大功能来构建具有原生桌面体验的应用。Pinia是在Vuex的基础上发展起来的,旨在解决Vuex在Vue3中遇到的一些兼容性问题,以及提供一个更为简洁和灵活的状态管理解决方案。以下几点是Pinia与Vuex的主要区别:模块化管理。

weixin_36178216的博客 1497

Quasar Electron桌面应用开发:从Web到桌面的终极迁移指南 [特殊字符]

想要将你的Web应用快速打包成专业的桌面应用吗?Quasar框架提供了**完整的Electron桌面应用解决方案**,让开发者能够轻松实现从Web到桌面的无缝迁移。无论你是前端新手还是资深开发者,这套方案都能帮你节省大量时间和精力。 ## 为什么选择Quasar Electron方案? Quasar框架的Electron集成方案具有**显著优势**: - **代码复用率高达90%** - 无

gitblog_00113的博客 1032

40-基于STM32与LD3320的智能语音调光台灯开发全攻略(代码+硬件+调试心得)

本文详细介绍了基于STM32与LD3320的智能语音调光台灯开发全攻略,包括硬件设计、软件实现和调试心得。项目利用STM32单片机控制LD3320语音识别模块,实现语音控制开关和PWM调光功能,适合非接触式操作场景。文章还分享了硬件选型、PWM调光算法优化及常见问题解决方案,为开发者提供完整参考。

weixin_29163797的博客 326

Cursor AI编程工具保姆级安装指南:从下载到中文界面设置(含免费额度说明)

本文提供Cursor AI编程工具的保姆级安装与设置教程。详细指导从官网下载、安装到中文界面切换的每一步,并重点说明其每月500次高级模型调用的免费额度策略。通过个性化设置与核心插件推荐,帮助开发者快速上手,提升AI辅助编程效率。

weixin_29191761的博客 674

Electron开发桌面App

Electron是可以开发跨平台桌面客户端的一套“集成框架”,所谓的“集成框架”也就是它将“Chromium”和“Node.js”很好的集成在了一起,并且很顺畅的一个负责界面,一个负责逻辑,大家井井有条。这是一个成本很低的解决方案,在快速交付上比之Native要快速了许多,大部分应用级别的应用,牺牲一部分性能而换取时间,这是有收益的。 官网:https://electronjs.org/ 哪些...

qq_36611278的博客 665

当GO.db安装失败时,生物信息学新手应该知道的5个底层逻辑

本文为生物信息学新手提供了解决GO.db安装失败的5个关键底层逻辑,包括网络连接与镜像源设置、版本兼容性检查、依赖关系管理、SQLite存储机制理解以及调试技巧。特别针对Bioconductor的GO.db包安装问题,详细介绍了如何通过切换国内镜像、管理版本冲突和解决依赖问题来成功安装,帮助用户高效克服常见安装障碍。

weixin_29062823的博客 409

Electron-tutorial-app 进阶指南:如何将Web技术栈迁移到桌面应用

想要将你的Web应用快速转化为跨平台的桌面应用吗?Electron-tutorial-app 提供了一个完美的学习范例,展示了如何利用现代Web技术栈构建专业的桌面应用。这款基于Electron的教程应用不仅演示了核心功能实现,还包含了完整的打包、本地化、菜单系统等企业级功能,是Web开发者转向桌面应用开发的终极指南。 ## 🚀 为什么选择Electron进行Web技术栈迁移? Electr

gitblog_00496的博客 690

手把手教你用Python+Playwright实现抖音/B站/视频号三平台自动上传(附完整配置流程)

本文详细介绍了如何使用Python和Playwright构建一个多平台视频自动化上传系统,涵盖抖音、B站和视频号三大平台。文章从环境搭建、身份验证持久化、平台特异性上传引擎设计到任务调度与错误处理,提供了完整的配置流程和实战代码,帮助开发者实现高效、稳定的批量上传功能。

weixin_29294975的博客 1155

104基于深度学习识别是AI生成还是真实图片

的可视化界面,通过点击左侧可以加载要识别的检测对象图片,点击中间的识别按钮,会识别出结果,识别结果在右侧显示,当前识别的图片是真实的图片,非假图片。有兴趣的小伙伴也可以自行扩充数据集,或训练自己的数据集。文本,分别存放了图片路径和对应的标签。文本里面的数据,并将训练好的模型也保存在本地。即可加载训练好的模型,真假图片进行识别。本期给大家介绍的是基于深度学习识别是。代码整体是非常简便的,总共三个。个文件夹分别是真图和。

xcvxvfgdfgfh的博客 2261

Tauri 与 Electron的深度体验

在跨平台桌面开发领域,Electron 曾长期占据主导地位,但随着用户对性能、体积和安全性的要求不断提高,新兴框架 Tauri 逐渐进入开发者视野。本文基于真实项目经验(如 Authme 等应用开发),结合技术细节和实际数据,从多个维度对比 Tauri 与 Electron 的优劣,并探讨其适用场景。从 Electron 转向 Tauri 的过程,像是从“重型卡车”换成了“新能源轿车”——前者稳定但笨重,后者轻便却需适应新驾驶方式。若项目允许试错,Tauri 的潜力值得押注;

bacjka的博客 2053

大模型实战—通义千问大模型微调

这个参数仅针对 llama 类型的模型结构,默认勾选的是 q_proj 和 v_proj,具体的名词不容易理解,我就不多说了,可以简单的认为是对模型的理解能力进行优化,一般这两个就够了。当这个值较高时,适应新任务的能力会增强,但是对基础模型的影响会比较大,有过拟合的风险,尤其是在数据量有限的情况下。为了方便测试,我在云环境也创建了一个镜像,相关的环境都配置好了,可以直接使用几个国内开源的大语言模型,比如清华智谱的ChatGLM3-6B、零一万物的Yi-34B,还有最近阿里云开源的Qwen1.5-32B。

7万+

Memos桌面应用:Electron封装与原生体验

你是否曾为寻找一款轻量级、数据自主可控的笔记应用而困扰?Memos作为一款开源、轻量级的笔记服务(Note-taking Service),以其简洁的设计和强大的功能赢得了众多用户的青睐。然而,Web应用固有的局限性——如依赖浏览器、缺乏系统级集成——始终是提升用户体验的瓶颈。本文将详细介绍如何使用Electron将Memos从Web应用封装为功能完备的桌面应用,突破浏览器限制,实现真正的原生体验...

gitblog_00229的博客 1122

手把手教你学SOME/IP「3.2.1.发布/订阅行为」

本文详细介绍了SOME/IP协议中的服务发现机制,重点解析了发布/订阅行为的流程。主要内容包括:1)服务发布与Method通信流程,涵盖find/offer报文交互、TTL保活机制及异常处理;2)服务订阅与Event通信流程,包括subscribe/ack报文交互和组播延迟机制;3)特殊场景如快速发送、半周期回复、重置订阅等机制。通过邮局订阅报纸的类比,帮助理解服务发现的核心原理,并强调流程图对于问题定位的重要性。文章为SOME/IP协议的工程实现提供了实用指导。

nihaoljq2010的博客 1223

Simulink开发项1000例实战专栏--实例148:构建一个完整的电动汽车电池SOH评估仿真模型,包括电池建模模块、数据采集模块、SOH估算算法模块以及性能评估模块

电动汽车的动力电池是其核心部件,而电池的健康状态(State of Health, SOH)直接影响车辆的续航能力和使用寿命。SOH通常定义为当前电池容量与初始容量的比值,用百分比表示。通过基于MATLAB/Simulink平台的SOH评估仿真,可以实时监测电池的退化情况,并为电池管理系统(BMS)提供决策依据。本项目旨在构建一个完整的电动汽车电池SOH评估仿真模型,包括电池建模模块、数据采集模块、SOH估算算法模块以及性能评估模块,并通过仿真验证SOH评估的准确性。

xiaoheshang_123的博客 342
上一篇: Electron 结合WEB项目制作桌面APP之一 ---- 基础填坑
下一篇: 前端开发中的密码学问题
EricLua
博客等级 码龄10年 34粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值